wake-up-neo.net

Programmgesteuertes Ändern der Bildschirmhelligkeit (wie beim Power Widget)

Ich habe nach einer programmgesteuerten Änderung der Bildschirmhelligkeit gesucht und festgestellt, dass this eine sehr gute Lösung ist und funktioniert. Schön, aber nur, wenn meine App aktiv ist. Nachdem meine Anwendung heruntergefahren wurde, wird die Helligkeit auf den gleichen Wert zurückgesetzt wie vor dem Start meiner App.

Ich möchte in der Lage sein, die Helligkeit genau so zu ändern, wie wenn ich auf die Helligkeitstaste meines Energie-Widgets drücke. In dem Power-Widget, das von Android) stammt, gibt es 3 Zustände. Einer sehr hell, einer sehr dunkel und einer dazwischen. Ist es möglich, die Helligkeit so zu ändern, wie wenn jemand auf dieses Widget drückt?

enter image description here

Edit1: Ich habe dies erstellt und die Berechtigung zu meinem Manifest hinzugefügt, aber wenn die App gestartet wird, sehe ich keine Änderungen an der Helligkeit. Ich habe es mit 10 mit 100 und jetzt mit 200 versucht, aber keine Änderungen. Irgendwelche Vorschläge?

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);
}
29
Lukap

Dies ist der vollständige Code, den ich als funktionierend befunden habe:

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));

Der Code aus meiner Frage funktioniert nicht, weil der Bildschirm nicht aktualisiert wird. Ein Hack beim Aktualisieren des Bildschirms startet also die Dummy-Aktivität und ruft dann beim Erstellen dieser Dummy-Aktivität finish() auf, damit die Änderungen der Helligkeit wirksam werden.

40
Lukap

Verwenden Sie in diesem Link die Lösung von Tor-Morten, stellen Sie die Systemhelligkeit jedoch wie folgt ein:

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

Wobei bright eine ganze Zahl zwischen 1 und 255 ist.

13
Glitch

Ich habe dieses Problem heute gelöst.

Als erstes müssen Sie eine Berechtigung in Ihre AndroidManifest.xml-Datei einfügen:

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

Wo ist der genaue Ort, um es in die Datei zu setzen?

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

Diese Berechtigung besagt, dass Sie Einstellungen ändern dürfen, die sich auch auf andere Anwendungen auswirken.

Jetzt können Sie den automatischen Helligkeitsmodus ein- und ausschalten

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)

Ist der automatische Modus gerade aktiviert oder deaktiviert? Sie können die Informationen erhalten

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

Wenn Sie also die Helligkeit manuell ändern möchten, müssen Sie zuerst den manuellen Modus einstellen und danach können Sie die Helligkeit ändern.

note: SCREEN_BRIGHTNESS_MODE_AUTOMATIC ist 1

note: SCREEN_BRIGHTNESS_MODE_MANUAL ist 0

Sie sollten dies verwenden

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

an Stelle von

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

Jetzt können Sie die Helligkeit manuell ändern

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

und lesen Sie die Helligkeit

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

Jetzt ist alles richtig eingestellt, aber ... Sie können die Änderung noch nicht sehen. Sie brauchen noch eine Sache, um die Veränderung zu sehen! Aktualisieren Sie den Bildschirm ... Gehen Sie dazu folgendermaßen vor:

    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) {}

Vergiss die Erlaubnis nicht ...

<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
10
PEPAN

Wenn Sie beim Einrichten der Parameter den Kontext der Aktivität übergeben, wird die Aufgabe auch erledigt, ohne dass eine weitere Aktivität gestartet werden muss. Folgendes hat für mich funktioniert:

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

ich hatte dieses Stück Code in onSensorChanged () -Methode, die die Anzeige abgeblendet, wenn es ausgelöst wurde.

7
Deepak Negi

KOMPLEXES BEISPIEL:

    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) {}
3
PEPAN