2010-09-17 24 views
36

voglio cambiare la luminosità dello schermo a livello di codice in Android. Al momento di questo codice:cambiare la luminosità dello schermo a livello di codice in Android

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

Ma questo codice di esempio funziona su cupcake, non su tutte le versioni. Sto usando l'ultima versione di SDK .. Qual è la soluzione preferita per le versioni Android più recenti?

+0

possibile duplicato del [Impossibile applicare sistema di luminosità dello schermo a livello di codice in Android] (http://stackoverflow.com/questions/5032588/cant-apply-system-screen-brightness-programmatically-in-android) – bummi

+0

Aumento della luminosità in mostra di una finestra di dialogo http://stackoverflow.com/a/29091233/185022 –

risposta

1

Come sull'utilizzo dell'interfaccia IHardwareService per questo? Un esempio può essere trovato in questo tutorial.

Update: Link esercitazione funziona ancora, ma il codice attuale è disponibile in risposta successiva anche.

+1

Wow, una risposta accettata * e * un voto basso. Forse l'elettore avrebbe voluto spiegare perché lo ha fatto? –

+44

Penso che l'abbia fatto perché la tua risposta contiene solo un link alla soluzione. Stackoverflow ha lo scopo di raccogliere esempi e soluzioni direttamente e il collegamento alle fonti è solo secondario. Se il tuo link è morto, la tua risposta è completamente morta. Se le interfacce di Android cambiano e si dispone di un esempio di spiegazione e in collegamento nella risposta, potrei semplicemente modificare la risposta in modo da riflettere le modifiche API. – Janusz

+1

Il collegamento dell'esercitazione è come morto .. Nessuna fonte trovata @tutorial. –

75

Questo è possibile fare utilizzando:

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

Vedi anche: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#screenBrightness

+4

ma il valore di luminosità non è stato salvato per la prossima volta che il dispositivo si risveglia dallo spegnimento ... come salvarlo in modo coerente non solo per una finestra ma dovrebbe essere per tutti ..... ???? –

+3

float prevBrightness = layout.screenBrightness; otterrà la luminosità attuale. Salva questo in onSaveInstancedSaved() o in sharedPreference – for3st

+0

Questa dovrebbe essere la risposta corretta nel layout –

2

@kamal_tech_view: Devi convertire il valore layout.screenBrightness = valore; a galleggiare

4

È necessario aggiungere params per Window prima che venga creato altrimenti buttare java.lang.IllegalArgumentException: Window type can not be changed after the window is added.

vedere l'esempio 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(); 

Si noti che il valore di luminosità è compreso tra 0,0 F e 1,0 F.

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(); 
Problemi correlati