Android 6.0权限拒绝:需要权限android.permission.WRITE_SETTINGS
问题描述:
正如您从我的清单中看到的,我已经添加了权限,我错过了什么?Android 6.0权限拒绝:需要权限android.permission.WRITE_SETTINGS
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
答
事实证明,你需要使用不同的机制在Android的6 requestPermissions
不工作被授予WRITE_SETTINGS
,但CommonsGuy提供了这里解决方法:https://stackoverflow.com/a/32083622/238753
答
这是一种特殊情况: permision级别:签名,
如果应用程序的目标API级别为23或更高,则应用程序用户必须通过权限管理屏幕向应用程序显式授予此权限。
该应用程序通过发送具有操作ACTION_MANAGE_WRITE_SETTINGS的意图来请求用户的批准。
该应用程序可以通过调用Settings.System.canWrite()来检查它是否具有该授权。
答
在API 23或更高版本,用户必须手动授权使用该权限,则可以通过calling-检查“Settings.System.canWrite”下面是该实施: -
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(context)) {
// Do stuff here
}
else {
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getActivity().getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
答
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(getApplicationContext())) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, 200);
}
}
这奇迹般有效。
https://developer.android.com/preview/features/runtime-permissions.html – Budius
我已经读过它了。requestPermissions()方法不起作用,为什么? – Dobin
也许你应该检查,然后:http://stackoverflow.com/help/on-topic和该http://stackoverflow.com/help/dont-ask – Budius