2012-02-18 17 views
5

Sto semplicemente cercando di attivare e disattivare la luminosità automatica. Ho iniziato con questo codice (all'interno del metodo onCreate)Come attivare e disattivare la luminosità automatica? (non una ripetizione)

final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle); 

    // display auto brightness state 
    final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle); 
    autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 

    autoBrightToggle.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (autoBrightToggle.isChecked()) { 
       setAutoBright(true); 
      } else { 
       setAutoBright(false); 
      } 
     } 
    }); // end anonymous OnClickListener function 

    // toggle the brightness mode 
    private void setAutoBright(boolean mode) { 
     if (mode) { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } else { 
     Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
     autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode())); 
     } 
    } 

che non sembra funzionare. Il metodo setAutoBrightnessMode() viene anche chiamato di nuovo in onResume() ma con gli stessi non-risultati. Ad ogni modo, mi dispiace se qualcuno ritiene che questa domanda sia ridondante, ma gli altri post non mi hanno portato dove devo andare!

(FWIW - sto testando questo sul mio vecchio Droid X e il mio Galaxy Nexus, non l'Emulator)

CURA - aggiornamento su questo: Sono al 99% sicuro che ora che non sto vedendo alcun modifica la modalità Auto-Brightness riflessa nel pannello Impostazioni e nei widget del desktop - anche se in realtà potrei cambiare il suo valore. parte del problema è che non so esattamente come determinare se Auto-Brightness è acceso o no!

Ad esempio, lo schermo cambia rapidamente e visibilmente? Mi aspettavo cambiamenti visibili immediati della luminosità in base all'ambiente - ma forse i cambiamenti sono sottili? e per un periodo più lungo? o forse ci vogliono 30 secondi o più di cambiamenti ambientali prima che la luminosità cambi?

Qualcuno può suggerire come posso rintracciarlo? Ho provato a interrogare la costante Settings.System.SCREEN_BRIGHTNESS_MODE - collegare questo metodo fino ad un campo di testo:

private int getAutoBrightnessMode() { 
    try { 
     int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE); 
    } catch (Settings.SettingNotFoundException e) { 
     e.printStackTrace(); 
     int brightnessMode = -10000; 
    } 
    return brightnessMode; 
    } 

ma si legge sempre 0, anche dopo un onResume(). : - ((

So che questa è una procedura semplice, ma sto provando a imparare questa roba per conto mio e non ho quasi mai avuto un addestramento CS formale ... Quindi tutto quello che posso dire è che sono molto frustrato da questo e sento come se io stesso ho lavorato in un angolo e, a questo punto io sono così infastidito non riesco a pensare più.

così aiuto sarebbe grande.

+0

niente ?? Speravo fosse una cosa semplice! –

+0

Suppongo che dovrai concedere le autorizzazioni appropriate nel manifest Android (ad esempio 'android.permission.WRITE_SETTINGS'). –

+0

grazie - l'ho fatto. avrei dovuto dirlo. –

risposta

8

io uso seguente approccio in Testata su HTC Desire HD e coppia di tablet noname cinesi
Aggiungi autorizzazione manifest:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

E utilizzare il codice seguente per attivare la luminosità automatica. C'è un trucco nel codice: abbiamo bisogno di "aggiornare" la luminosità dell'app manualmente, perché non cambia automaticamente. Potrebbe essere il problema nel tuo caso.

void setAutoBrightness(boolean value) { 
    if (value) { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC); 
    } else { 
     Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    } 

    // After brightness change we need to "refresh" current app brightness 
    if (isChecked) { 
     refreshBrightness(-1); 
    } else { 
     refreshBrightness(getBrightnessLevel()); 
    } 
} 

private void refreshBrightness(float brightness) { 
    WindowManager.LayoutParams lp = getWindow().getAttributes(); 
    if (brightness < 0) { 
     lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE; 
    } else { 
     lp.screenBrightness = brightness; 
    } 
    getWindow().setAttributes(lp); 
} 

int getBrightnessLevel() { 
    try { 
     int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS); 
     // convert brightness level to range 0..1 
     value = value/255; 
     return value; 
    } catch (SettingNotFoundException e) { 
     return 0; 
    } 
} 
+0

grazie per aver risposto a Sergey, ma non sono sicuro che sia la soluzione alla mia domanda. Non ho problemi a far sì che lo schermo/finestra rifletta le modifiche apportate ad esso utilizzando la barra di ricerca, la luminosità dello schermo cambia istantaneamente senza che sia necessario aggiornare manualmente gli attributi della finestra. per quanto riguarda la luminosità automatica, ho lo stesso codice esatto del metodo setAutoBrightness, semplicemente non sembra fare nulla.Ho provato a usare la tua idea di 'rinfrescante' dopo aver impostato i valori di luminosità, ma non sembra avere NESSUN effetto su Auto-Brightness in modalità Auto o meno –

+0

come ho detto sopra Sergey - come sei in grado per dire se la modalità è stata attivata o no? Stavo solo guardando le Impostazioni e/o il mio widget Impostazioni alimentazione ... ma ho iniziato a pensare che forse non riflettesse le modifiche. quindi ho provato a testarlo da solo passando dall'oscurità alla luce - ma non so quanto velocemente cambi luminosità ecc. - puoi vedere sopra per una spiegazione completa di ciò che sto chiedendo. –

+0

Che cosa significa "isChecked" significa qui? Dove imposti questa variabile? – Deqing

Problemi correlati