2010-09-17 14 views
36

Quiero cambiar el brillo de la pantalla programáticamente en android. En el momento en que utilice este código:cambiando el brillo de la pantalla programáticamente en android

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

Pero este código de ejemplo funciona en magdalena, no en las versiones más recientes. Estoy usando la última versión de SDK. ¿Cuál es la solución preferida para las nuevas versiones de Android?

+0

posible duplicado de [No se puede aplicar sistema de brillo de la pantalla mediante programación en Android] (http://stackoverflow.com/questions/5032588/cant-apply-system-screen-brightness-programmatically-in-android) – bummi

+0

Aumenta el brillo en el cuadro de diálogo http://stackoverflow.com/a/29091233/185022 –

Respuesta

1

¿Qué le parece usar la interfaz IHardwareService para esto? Se puede encontrar un ejemplo en este tutorial.

Actualización: el enlace del tutorial sigue funcionando, pero el código real también está disponible en la siguiente respuesta.

+1

Guau, una respuesta aceptada * y * un voto negativo. ¿Quizás el votante se preocupe por explicar por qué lo hizo? –

+44

Creo que lo hizo porque su respuesta solo contiene un enlace a la solución. Stackoverflow está destinado a recopilar ejemplos y soluciones directamente y vincular a las fuentes es solo secundario. Si tu enlace está muerto, tu respuesta está totalmente muerta. Si las interfaces de Android cambian y tiene un ejemplo de explicación y un enlace en la respuesta, podría simplemente editar su respuesta para reflejar los cambios de la API. – Janusz

+1

El enlace del tutorial es como muerto ... no se encontró ninguna fuente @tutorial. –

75

Esto se puede hacer mediante el uso de:

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

Ver también: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

+4

pero el valor de brillo no se guardó para la próxima vez que el dispositivo se active después del apagado ... ¿cómo guardarlo consistentemente no solo para una ventana, sino para todos ... ??? –

+3

float prevBrightness = layout.screenBrightness; obtendrá el brillo actual. Guarde esto en onSaveInstancedSaved() o en sharedPreference – for3st

+0

Esta debería ser la respuesta correcta –

2

@kamal_tech_view: Debe convertir el valor layout.screenBrightness = value; flotar

4

Hay que añadir params a Window antes de que se crea lo contrario será tirar java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

Véase el ejemplo con un 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(); 

Tenga en cuenta que el valor de brillo está entre 0.0F y 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(); 
Cuestiones relacionadas