2011-10-04 11 views
27

Stavo cercando come modificare la luminosità dello schermo a livello di codice e ho trovato this è un'ottima soluzione e funziona bene, ma funziona solo mentre la mia app è attiva. Dopo che la mia applicazione è stata chiusa, la luminosità viene restituita con lo stesso valore di prima che avvii la mia app.Modifica della luminosità dello schermo a livello di programmazione (come con il widget di alimentazione)

Desidero poter modificare la luminosità proprio come quando premo il pulsante di luminosità dal mio widget di alimentazione. Nel widget di alimentazione che proviene da Android ci sono 3 stati. Uno molto luminoso molto scuro e uno in mezzo. È possibile modificare la luminosità proprio come quando qualcuno preme su questo widget?

enter image description here

Edit1: Ho creato questo e ho aggiunto permision al mio manifesto, ma quando l'applicazione viene avviata non vedo alcuna modifica della luminosità, ho provato con 10 con 100 e ora con 200, ma senza cambia qualche suggerimento?

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
android.provider.Settings.System.putInt(this.getContentResolver(), 
     android.provider.Settings.System.SCREEN_BRIGHTNESS, 200); 
} 
+0

l'hai provato questi http://stackoverflow.com/questions/3865883/changing-screen-brightness-in-android-emulator non shore se il cambiamento di proprietà di luminosità personalizzata è – PedroAGSantos

risposta

38

Questo il codice completo che ho trovato a lavorare:

Settings.System.putInt(this.getContentResolver(), 
     Settings.System.SCREEN_BRIGHTNESS, 20); 

WindowManager.LayoutParams lp = getWindow().getAttributes(); 
lp.screenBrightness =0.2f;// 100/100.0f; 
getWindow().setAttributes(lp); 

startActivity(new Intent(this,RefreshScreen.class)); 

il codice da mia domanda non funziona perché lo schermo non viene aggiornato. Quindi, uno strumento per aggiornare lo schermo inizia un'attività fittizia e crea una di quelle attività fittizie per chiamare finish() in modo che le modifiche apportate alla luminosità abbiano effetto.

+0

Strano che tu debba farlo. :/ Quale telefono stai usando? – Glitch

+0

Non è strano, io uso il desiderio di htc, ho provato il codice anche su samsung galaxy ... Non è un problema di dispositivo è come funziona l'androide, semplicemente non applica la luminosità fino a quando il win manager non viene aggiornato e lui si aggiorna premendo il pulsante indietro, home o creando una nuova attività ... – Lukap

+0

forse se usi un widget non ha bisogno di essere aggiornato ma nel caso tu inserisca il codice in oncreate, ha sicuramente bisogno di attività aggiuntive da avviare, (almeno questo era il mio caso) senza quell'attività fittizia l'app non work property – Lukap

13
soluzione

Utilizzo Tor-Morten in quel link, ma anche impostare l'impostazione in questo modo luminosità sistema:

android.provider.Settings.System.putInt(getContext().getContentResolver(), 
android.provider.Settings.System.SCREEN_BRIGHTNESS, bright); 

Dove bright è un intero compreso tra 1 e 255.

+0

Ottengo qualche eccezione Immagino di non avere alcun permesso, vero? w il permesso – Lukap

+0

Qualcuno sa quali autorizzazioni sono necessarie? – Lukap

+0

Aggiungo l'autorizzazione e non lancia eccezioni ma questo non modifica affatto la luminosità, puoi dirmi quale è il problema? – Lukap

6

Passare il contesto dell'attività durante l'impostazione dei parametri consente inoltre di completare il lavoro senza che sia necessario avviare un'altra attività. I seguenti lavorato per me-

WindowManager.LayoutParams lp = this.getWindow().getAttributes(); 
lp.screenBrightness =0.00001f;// i needed to dim the display 
this.getWindow().setAttributes(lp); 

avevo questo pezzo di codice all'interno onSensorChanged() metodo che inattiva display ogni volta che è stato attivato.

+2

Non impostarlo mai a zero. Impostalo su 0,00001f. Impostandolo su zero, alcuni telefoni spegneranno lo schermo indefinitamente, costringendo a ripristinare il telefono tenendo premuto il pulsante di accensione o rimuovendo la batteria. –

+1

Grazie, ha modificato la risposta. –

9

Ho risolto questo problema oggi.

Mentre il primo si deve mettere un permesso nel file AndroidManifest.xml:

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

Dove si trova il luogo esatto per dirla nel file?

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

Questa autorizzazione dice, che si è permesso di modificare le impostazioni che influiscono altre applicazioni.

Ora è possibile impostare la modalità automatica della luminosità e disattivare

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); //this will set the automatic mode on 
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off) 

è la modalità automatica attivata o disattivata in questo momento?È possibile ottenere le informazioni

int mode = -1; 
try { 
    mode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); //this will return integer (0 or 1) 
} catch (Exception e) {} 

Quindi, se si desidera modificare la luminosità manualmente, si suppone di impostare prima la modalità manuale e dopo che è possibile modificare la luminosità.

nota: SCREEN_BRIGHTNESS_MODE_AUTOMATIC è 1

nota: SCREEN_BRIGHTNESS_MODE_MANUAL è 0

si dovrebbe usare questa

if (mode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) { 
    //Automatic mode 
} else { 
    //Manual mode 
} 

invece di questo

if (mode == 1) { 
    //Automatic mode 
} else { 
    //Manual mode 
} 

Ora è possibile modificare la luminosità manualmente

Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); //brightness is an integer variable (0-255), but dont use 0 

e leggere la luminosità

try { 
    int brightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //returns integer value 0-255 
} catch (Exception e) {} 

Ora tutto è impostato correttamente, ma ... non si può vedere il cambiamento ancora. Hai bisogno di un'altra cosa per vedere il cambiamento! Aggiornare la schermata ... quindi fare questo:

try { 
     int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); //this will get the information you have just set... 

     WindowManager.LayoutParams lp = getWindow().getAttributes(); 
     lp.screenBrightness = (float) br/255; //...and put it here 
     getWindow().setAttributes(lp); 
    } catch (Exception e) {} 

Non dimenticare il permesso ...

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

ESEMPIO COMPLESSO? – PEPAN

+0

+1 per aver bisogno di regolare la modalità schermo_brightness su manuale. Inoltre, per API 23 e successive, l'impostazione delle autorizzazioni in manifest non funziona più - consultare https://developer.android.com/training/permissions/requesting.html. Vedi http://stackoverflow.com/questions/32266425/android-6-0-permission-denial-requires-permission-android-permission-write-sett per come modificare le autorizzazioni per API 23 e successive. – Ying

3

COMPLESSO ESEMPIO:

try { 
     //sets manual mode and brightnes 255 
     Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); //this will set the manual mode (set the automatic mode off) 
     Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 255); //this will set the brightness to maximum (255) 

     //refreshes the screen 
     int br = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); 
     WindowManager.LayoutParams lp = getWindow().getAttributes(); 
     lp.screenBrightness = (float) br/255; 
     getWindow().setAttributes(lp); 

    } catch (Exception e) {} 
+0

PEPAN

+0

Non dimenticare il permesso! O non succederà niente! – PEPAN