2010-09-17 3 views
36

Я хочу программно изменить яркость экрана в Android. На данный момент я использую этот код:Программно изменяя яркость экрана в android

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
float brightness=1.0f; 
lp.screenBrightness = brightness; 
getWindow().setAttributes(lp); 

Но этот пример кода работает на кекс, а не на последних версиях. Я использую последнюю версию SDK. Какое предпочтительное решение для новых версий Android?

+0

возможно дубликат [Невозможно применить систему яркости экрана программно в Android] (http://stackoverflow.com/questions/5032588/cant-apply-system-screen-brightness-programmatically-in-android) – bummi

+0

Увеличение яркости при отображении диалога http://stackoverflow.com/a/29091233/185022 –

ответ

1

Как насчет использования интерфейса IHardwareService? Пример можно найти в этом tutorial.

Обновление: ссылка на учебное пособие по-прежнему работает, но фактический код также доступен в следующем ответе.

+1

Вау, принятый ответ * и * проголосовало. Может быть, избиратель хотел бы объяснить, почему он это сделал? –

+44

Я думаю, что он сделал это, потому что ваш ответ содержит только ссылку на решение. Stackoverflow предназначен для сбора примеров и решений напрямую, а ссылки на источники - только вторичные. Если ваша ссылка мертва, ваш ответ полностью мертв. Если интерфейсы android меняются, и у вас есть пример объяснения, и в ссылке в ответе я мог бы просто отредактировать ваш ответ, чтобы отразить изменения api. – Janusz

+1

Ссылка на учебник похожа на мертвую .. нигде не найден источник @tutorial. –

75

Это можно сделать с помощью:

WindowManager.LayoutParams layout = getWindow().getAttributes(); 
layout.screenBrightness = 1F; 
getWindow().setAttributes(layout); 

Смотрите также: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

+4

, но значение яркости не получило сохранения в течение следующего времени, когда устройство перестает отключаться ... как сохранить его последовательно не только для одного окна, но и для всех ..... ???? –

+3

float prevBrightness = layout.screenBrightness; получит текущую яркость. Сохраните это в onSaveInstancedSaved() или в sharedPreference – for3st

+0

Это должен быть правильный ответ –

1

Слишком поздно ответ, но хотите улучшить ..

Я попытался с кодом Tor-Мортена, но это для конкретного экрана, я хотел что-то изменить, я сделал сервис для этого.

Change brightness according to surrounding light in android

Надежда, это будет полезно для других.

2

@kamal_tech_view: Вы должны преобразовать значение layout.screenBrightness = value; плавать

4

Вы должны добавить Params к Window прежде, чем он будет создан в противном случае он будет бросать java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

Смотрите пример с android.app.Dialog.Dialog.

final Dialog dialog = new Dialog(this) { 
      @Override 
      public void onAttachedToWindow() { 
       super.onAttachedToWindow(); 
       WindowManager.LayoutParams layout = getWindow() 
         .getAttributes(); 
       layout.screenBrightness = 1F; 
       getWindow().setAttributes(layout); 
      } 
     }; 
     dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     dialog.show(); 

Обратите внимание, что значение яркости составляет от 0,0F до 1,0F.

0
final Dialog dialog = new Dialog(act); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog 
       .setContentView(R.layout.menubase_brightness_control); 
     dialog.setCanceledOnTouchOutside(true); 

     SeekBar global_brightness_control = (SeekBar) dialog 
       .findViewById(R.id.global_brightness_control); 
     global_brightness_control.setMax(255); 
     global_brightness_control.setProgress(Settings.System.getInt(
       con.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)); 

     global_brightness_control 
       .setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 

        public void onStopTrackingTouch(SeekBar seekBar) { 
         // TODO Auto-generated method stub 

        } 

        public void onStartTrackingTouch(SeekBar seekBar) { 
         // TODO Auto-generated method stub 

        } 

        public void onProgressChanged(SeekBar seekBar, 
                int progress, boolean fromUser) { 
         Settings.System 
           .putInt(con.getContentResolver(), 
             Settings.System.SCREEN_BRIGHTNESS, progress); 
        } 
       }); 

     dialog.show(); 
Смежные вопросы