从下面的清单中可以看出,我已经添加了许可,我缺少什么?
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
答案 0 :(得分:54)
在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);
}
}
答案 1 :(得分:4)
事实证明,您需要在Android 6中使用不同的机制授予WRITE_SETTINGS
。requestPermissions
不起作用,但CommonsGuy在此处提供了一种解决方法:https://stackoverflow.com/a/32083622/238753
答案 2 :(得分:3)
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);
}
}
这就像一个魅力。
答案 3 :(得分:0)
这是一个特例:permision level:signature,
如果应用针对API级别23或更高级别,则应用用户必须通过权限管理屏幕向应用明确授予此权限。
该应用通过发送动作ACTION_MANAGE_WRITE_SETTINGS来请求用户的批准。
应用可以通过调用Settings.System.canWrite()来检查它是否具有此授权。
答案 4 :(得分:0)
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);
}
}
答案 5 :(得分:0)
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);
}
}
答案 6 :(得分:-1)
这取决于API级别和Android构建版本