【发布时间】:2015-08-28 08:18:21
【问题描述】:
从下面的清单中可以看到,我添加了权限,我缺少什么?
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
【问题讨论】:
-
我已经看过了,requestPermissions()方法不起作用,为什么?
标签: android android-permissions
从下面的清单中可以看到,我添加了权限,我缺少什么?
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
【问题讨论】:
标签: android android-permissions
在 API 23 或更高版本中,用户必须手动授权才能获得此权限,您可以通过调用来检查 - '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);
}
}
【讨论】:
onResume()
Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); stackoverflow.com/a/36001592/175225
事实证明,您需要在 Android 6 中使用不同的机制来授予 WRITE_SETTINGS。requestPermissions 不起作用,但 CommonsGuy 在这里提供了一种解决方法:https://stackoverflow.com/a/32083622/238753
【讨论】:
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);
}
}
这就像一个魅力。
【讨论】:
这是一个特殊情况:权限级别:签名,
如果应用以 API 级别 23 或更高级别为目标,则应用用户必须通过权限管理屏幕向应用明确授予此权限。
应用通过发送带有操作 ACTION_MANAGE_WRITE_SETTINGS 的意图来请求用户的批准。
应用可以通过调用Settings.System.canWrite()来检查它是否有这个权限。
【讨论】:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
boolean settingsCanWrite = Settings.System.canWrite(this);
if(!settingsCanWrite) {
Toast.makeText(this, "Require Permission to Handle Screen Brightness", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
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);
}
}
【讨论】:
这取决于 API 级别和 Android 构建版本
【讨论】: