Как вы можете видеть из моего манифестка ниже, я добавил разрешение "Что мне не хватает?"
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
Как вы можете видеть из моего манифестка ниже, я добавил разрешение "Что мне не хватает?"
<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" />
В 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);
}
}
Оказывается, вам нужно использовать другой механизм, который будет предоставлен WRITE_SETTINGS
в Android 6. requestPermissions
не работает, но CommonsGuy предоставил обходное решение здесь: fooobar.com/questions/99637/...
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);
}
}
Это зависит от уровня API и версии сборки Android