2010-12-06 12 views
9

Ich versuche, die Display-Helligkeit von einem Widget zu aktualisieren, aber ich habe ein paar Probleme.Update Display Helligkeit auf Android nach programmgesteuerter Änderung

Helligkeitsstufe zu ändern, die ich benutze:

Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, 200); 

ändert die Einstellung der Anzeige (in der Tat in Display-> Helligkeit der Pegel korrekt ist), aber die effektive Helligkeit der Anzeige nicht verändert wird. Wenn ich den Bildschirm sperre und entsperren, ändert sich die Helligkeit schließlich zu dem Wert, den ich eingestellt habe.

Ich gehe davon aus, dass dies ein Einstellungsaktualisierungsproblem ist, also wie können die Anzeigeeinstellungen sofort nach dem Ändern der Einstellungen aktualisiert werden?

Ich lese, dass WindowManager.LayoutParams lp = getWindow().getAttributes(); sollte verwendet werden, aber ich arbeite in einem App Widget so getWindow() kann nicht aufgerufen werden.

Antwort

6

Ich hatte ein ähnliches Problem und nur eine Aktivität ohne Benutzeroberfläche erstellt, um die Helligkeit ändern, verwendet eine Absicht, um es aus dem Widget App ausführen.

+0

Gute Idee! Sie haben eine neue Klassenaktivität erstellt oder in das Widget eingebunden? – Mariux

+0

Da Sie das Problem gelöst haben, können Sie etwas Code aufschreiben, um ihn klar zu erklären? Danke GeekYouUp! – Mariux

+0

Ich habe versucht, eine Aktivität zu erstellen, aber die Änderung der Helligkeit wird nur auf die Aktivität angewendet ... – Mariux

1

Zunächst ist der in LayoutParams zu ändernde Wert screenBrightness. Sie müssen dann eine window.setAttributes tun, um es anzuwenden. Als GeekYouUp sagte, Sie können eine Dummy-Aktivität machen, um Ihr Window-Objekt zu erhalten.

+0

Wie kann ich Dummy-Aktivität erstellen? –

+0

wie er sagte, Sie erstellen eine Aktivität, nur mit keiner Benutzeroberfläche verbunden –

0

Können Sie diesen Code in Ihre Remoteview verwenden,

Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness); 

// This makes the new screen brightness effective 
WindowManager.LayoutParams layoutParams = ((Activity)context).getWindow().getAttributes(); 
float b = brightness/255.0f; 
if(b == 0.0)  
    b = 0.01f; 
layoutParams.screenBrightness = b; 
((Activity)context).getWindow().setAttributes(layoutParams); 

Dieser Code feine Arbeiten, wenn Sie Telefon die Bildschirmhelligkeit Einstellung aus dem Inneren einer benutzerdefinierten Klasse, die ist keine Aktivität erstreckt aber Sie brauche nur den Kontext.