2016-04-17 3 views
4

Я использую следующий код для увеличения яркости. Он правильно работает на устройствах, которые ниже Зефира. Он рушится в Marshmallow, и я не нашел ничего, чтобы дать динамическое разрешение на Write-settings. У кого-нибудь есть идея, пожалуйста, помогите мне.Как разрешить изменение яркости экрана в Marshmallow

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); 

int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    lp.screenBrightness = (float) br/255; 
    getWindow().setAttributes(lp); 

Журнал ошибок:

java.lang.SecurityException: com.package was not granted this permission: android.permission.WRITE_SETTINGS. 
    at     android.provider.Settings.isCallingPackageAllowedToPerformAppOpsProtectedOperation(Settings.java:8465) 
    at android.provider.Settings.checkAndNoteWriteSettingsOperation(Settings.java:8338) 
at com.android.providers.settings.SettingsProvider.mutateSystemSetting(SettingsProvider.java:899) 
at com.android.providers.settings.SettingsProvider.insertSystemSetting(SettingsProvider.java:874) 
at com.android.providers.settings.SettingsProvider.call(SettingsProvider.java:257) 
at android.content.ContentProvider$Transport.call(ContentProvider.java:398) 
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:283) 
at android.os.Binder.execTransact(Binder.java:453) 
+1

поместить ваш журнал ошибок – Sayem

+0

Попробуйте это может быть работа http://stackoverflow.com/a/41221852/5488468 –

ответ

5

С API 23 вы должны спросить динамически от пользователя, если у них есть разрешение WRITE_SETTINGS с помощью Settings.System.canWrite(context). Если вы хотите, чтобы пользователь одобрил эту настройку, вы должны начать с действия ACTION_MANAGE_WRITE_SETTINGS. Код, вероятно, нужно что-то вроде следующим образом:

if (Settings.System.canWrite(context)) 
{ 
    // perform your actions 
} 
else 
{ 
    Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS) 
    .setData(Uri.parse("package:" + getActivity().getPackageName())) 
    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
Смежные вопросы