如您可以从我的清单文件下方看到,我已添加了权限,请问我漏掉了什么?
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
如您可以从我的清单文件下方看到,我已添加了权限,请问我漏掉了什么?
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
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()
中再次检查。 - xorgateSettings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
https://dev59.com/_Gsz5IYBdhLWcg3w0bKl#36001592 - Ying实际上,在Android 6中获得WRITE_SETTINGS
权限需要使用不同的机制。 requestPermissions
无效,但是CommonsGuy在这里提供了解决方法:https://dev59.com/iVwY5IYBdhLWcg3w5bTt#32083622
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);
}
}
这个功能非常好用。
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);
}
}
这是一个特殊情况:权限级别为“signature”,
如果应用程序的目标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);
}
}
这取决于API级别和Android构建版本。