2016-04-21 4 views
0

Я работаю над приложением Android, которое программно меняет яркость экрана. У меня есть установленный метод яркости, который работает на 5.1.1. Но когда я запускаю приложение на 6.0, он дает ошибку и закрывает приложение. Пожалуйста, помогите.Изменение яркости экрана в 6.0 программным способом

Ниже мой подход:

public void setBrightness(View view,int brightness){ 

    //Just a loop for checking whether the brightness changes 
    if(brightness <46) 
     brightness = 255; 
    else if(brightness >150) 
     brightness=45; 
    ContentResolver cResolver = this.getApplicationContext().getContentResolver(); 
    Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness); 

} 

public void setDisplay(View view) 
{ 
    ContentResolver cResolver = getContentResolver(); 

    Window window = getWindow(); 
    int brightness=0; 
    try 
    {  Settings.System.putInt(cResolver,Settings.System.SCREEN_BRIGHTNESS_MODE 
            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); 
        brightness = Settings.System.getInt(cResolver, Settings.System.SCREEN_BRIGHTNESS); 
     System.out.println("Current Brightness level " + brightness); 
    } 
    catch (Exception e) 
    { 
        Log.e("Error", "Cannot access system brightness"); 
     e.printStackTrace(); 
    } 
    setBrightness(view,brightness); 
} 
+1

У нас ур код? –

+0

http://stackoverflow.com/questions/18312609/change-the-system-brightness-programmatically попробуйте это –

+0

Есть ли что-нибудь дополнительное, что мне нужно сделать для 6.0? – Shashank

ответ

7

Видимо, вы должны явно попросить пользователя разрешения на устройствах под управлением Android 6.0+.

Попробуйте следующий код: (я модифицировал его для вас)

@TargetApi(Build.VERSION_CODES.M) 
public void setBrightness(View view,int brightness){ 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (Settings.System.canWrite(getApplicationContext())) 
     { 
      if (brightness < 46) 
       brightness = 255; 
      else if (brightness > 47) 
       brightness = 0; 

      ContentResolver cResolver = this.getApplicationContext().getContentResolver(); 
      Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, brightness); 

     } else 

     { 
      Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
      intent.setData(Uri.parse("package:" + this.getPackageName())); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     } 
} 

Обратите внимание, что вам нужно разрешение WRITE_SETTINGS в манифесте, а также.

+1

Спасибо за ответ @TargetApi (Build.VERSION_CODES.M) должны быть на самом деле. – Shashank

0

Если вы хотите для уточнения активности/фрагмента, попробуйте следующее:

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    lp.screenBrightness = 70/100.0f; 
    getWindow().setAttributes(lp); 
Смежные вопросы