Aktualisiere-Display-Helligkeit auf Android, nachdem sie programmatisch zu ändern
-
09-10-2019 - |
Frage
Ich versuche, die Display-Helligkeit von einem Widget zu aktualisieren, aber ich habe einige Probleme.
Um Helligkeit 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 Anzeigen-> Helligkeit der Pegel korrekt ist), aber die effektive Helligkeit der Anzeige wird nicht verändert. Wenn ich den Bildschirm und entsperren sperren, ändert sich die Helligkeit schließlich auf den Wert i gesetzt.
Ich nehme an, das ein Einstellungen Update-Problem ist, so kann, wie die Anzeigeeinstellungen sofort nach Einstellungen ändern aktualisiert werden?
Ich habe gelesen, dass WindowManager.LayoutParams lp = getWindow().getAttributes();
verwendet werden sollte, aber ich arbeite in einer App Widget so getWindow () kann nicht aufgerufen werden.
Lösung
Ich hatte ein ähnliches Problem und nur eine Aktivität ohne UI erstellt die Helligkeitsänderung zu tun, verwendete eine Absicht es aus dem App Widget ausgeführt werden.
Andere Tipps
Zuerst wird der Wert in LayoutParams zu ändern ist screenBrightness . Sie werden dann eine window.setAttributes , sie anzuwenden. Wie geekyouup sagte, können Sie macht eine Dummy-Aktivität Ihr Window-Objekt zu erhalten.
Können Sie diesen Code in Ihren 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 funktioniert gut, wenn Sie anrufen Bildschirmhelligkeit Einstellung aus dem Inneren einer benutzerdefinierten Klasse, die ist keine Aktivität erstreckt , aber Sie müssen nur den Kontext.