Android代码创建热点申请权限失败

稚元君 2017-12-28 03:10:42
7.0怎么申请android.permission.WRITE_SETTINGS,android.permission.WRITE_SECURE_SETTINGS这两个权限

开发背景:定制的Android系统,只支持7.0以上,root过,插线联网
新项目公司要求在定制的系统上创建一个热点给用户使用,贴出创建热点的代码↓↓↓

public boolean createWifi(String ssid, String psw) {
if (wifiManager.isWifiEnabled()) {
//WIFI与热点不能共存,如果WIFI是活动的,则关闭
wifiManager.setWifiEnabled(false);
}
try {
WifiConfiguration configuration = new WifiConfiguration();
//设置WIFI用户名
configuration.SSID = ssid;
//设置WIFI密码
configuration.preSharedKey = psw;
//反射调用设置热点
Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
return (boolean) method.invoke(wifiManager, configuration, true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
Logger.e("↓↓↓invoke↓↓↓");
e.getTargetException().printStackTrace();
}
return false;
}


然后手动开了WRITE_SECURE_SETTINGS权限之后抛出的异常

12-28 14:50:46.879 10289-10289/com.aands.audio W/System.err: java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
12-28 14:50:46.879 10289-10289/com.aands.audio W/System.err: at android.os.Parcel.readException(Parcel.java:1684)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.os.Parcel.readException(Parcel.java:1637)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.net.wifi.IWifiManager$Stub$Proxy.setWifiApEnabled(IWifiManager.java:1514)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.net.wifi.WifiManager.setWifiApEnabled(WifiManager.java:1547)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at com.aands.audio.utils.HotspotManager.createWifi(HotspotManager.java:64)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at com.aands.audio.activity.MainActivity.doSomething(MainActivity.java:305)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at kr.co.namee.permissiongen.PermissionGen.executeMethod(PermissionGen.java:105)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at kr.co.namee.permissiongen.PermissionGen.doExecuteSuccess(PermissionGen.java:91)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at kr.co.namee.permissiongen.PermissionGen.requestPermissions(PermissionGen.java:82)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at kr.co.namee.permissiongen.PermissionGen.request(PermissionGen.java:47)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at com.aands.audio.activity.MainActivity.requsetPermission(MainActivity.java:233)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at com.aands.audio.activity.MainActivity.access$000(MainActivity.java:53)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at com.aands.audio.activity.MainActivity$1.onClick(MainActivity.java:82)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.view.View.performClick(View.java:5637)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.view.View$PerformClick.run(View.java:22445)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.os.Handler.handleCallback(Handler.java:755)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
12-28 14:50:46.880 10289-10289/com.aands.audio W/System.err: at android.os.Looper.loop(Looper.java:154)
12-28 14:50:46.881 10289-10289/com.aands.audio W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6121)
12-28 14:50:46.881 10289-10289/com.aands.audio W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-28 14:50:46.881 10289-10289/com.aands.audio W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
12-28 14:50:46.881 10289-10289/com.aands.audio W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)

这个两个权限的问题要怎么解决?还有就是android.permission.WRITE_SETTINGS能不能自动开启
...全文
606 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
warcraftmgq 2017-12-28
  • 打赏
  • 举报
回复
正好最近也在搞一个需要打开热点通讯的app 请求修改设置权限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (!Settings.System.canWrite(this)) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
                        Uri.parse("package:" + getPackageName()));
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivityForResult(intent, REQUEST_CODE_ASK_WRITE_SETTINGS);
                return;
            }
        }
Android7.1以后打开热点的方法setWifiApEnabled已经失效,应使用ConnectivityManager的startTethering方法,但是该方法是隐藏的方法,需要自己编译Android源码,或者直接使用反射方式来调用,下面是通过反射直接获取ConnectivityManager对象里的的成员变量mService接口IConnectivityManager,通过它来调用startTethering来打开热点

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
                Field iConnMgrField = connManager.getClass().getDeclaredField("mService");
                iConnMgrField.setAccessible(true);
                Object iConnMgr = iConnMgrField.get(connManager);
                Class<?> iConnMgrClass = Class.forName(iConnMgr.getClass().getName());
                Method startTethering = iConnMgrClass.getMethod("startTethering", int.class, ResultReceiver.class, boolean.class);
                startTethering.invoke(iConnMgr, TETHERING_WIFI, new ResultReceiver(new Handler()) {
                    @Override
                    protected void onReceiveResult(int resultCode, Bundle resultData) {
                        super.onReceiveResult(resultCode, resultData);
                    }
                }, true);
                return true;

            } else {
                Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
                return (boolean) method.invoke(wifiManager, config, true);
            }

80,354

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧