Ich habe Code geschrieben, um DialogPreference zu erstellen, der ähnlich wie der Standard-Android-Helligkeitseinstellungsdialog funktionieren soll.
Es funktioniert perfekt, solange der Helligkeitsmodus auf Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
gesetzt ist. Wenn ich jedoch den Modus auf Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
ändere, wird die Bildschirmhelligkeit des Telefons nicht auf den Wert von Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)
übernommen.
Lassen Sie mich Ihnen ein Beispiel zeigen:
- Ich setze die Helligkeit in den Android-Einstellungen auf 255 und den Modus auf automatisch. Die Änderungen werden vom Telefon (sowie von meiner App) reflektiert.
- Ich setze die Helligkeit in den Android-Einstellungen auf 100 und den Modus auf manuell. Die Änderungen werden vom Telefon (sowie von meiner App) reflektiert.
- Ich setze die Helligkeit in meiner App auf 50 und der Modus ist immer noch manuell. Die Änderungen werden vom Telefon (sowie von meiner App) reflektiert.
- Ich setze die Helligkeit in meiner App auf 50 und den Modus auf automatisch. Obwohl ich die aktuelle Bildschirmhelligkeit programmgesteuert auf 50 ändere, hat der Rest meiner App und das Telefon selbst (zum Beispiel die Telefoneinstellungen und das Startmenü) eine Helligkeit von 255 und den Modus auf automatisch (was ich in den Android-Einstellungen überprüfen kann). Gleichzeitig gibt
Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)
immer noch 50 zurück.
Hier ist mein Code. Wie gesagt, er befindet sich in einer Klasse, die DialogPreference erweitert, daher die Methode onCreateDialogView.
private static int MAX_BRIGHTNESS_VALUE = 255;
@Override
protected View onCreateDialogView() {
View dialogView = super.onCreateDialogView();
mAutomatic = (CheckBox) dialogView.findViewById(R.id.automatic_brightness);
mBrightnessBar = (SeekBar) dialogView.findViewById(R.id.brightness_bar);
mBrightnessBar.setMax(MAX_BRIGHTNESS_VALUE);
mAutomatic.setChecked(getBrightnessMode() == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
mBrightnessBar.setProgress(getBrightness());
mAutomatic.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
setAutomaticBrightness();
} else {
setManualBrightness();
}
}
});
mBrightnessBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (progress > 10) {
setBrightness(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
return dialogView;
}
private void setBrightness(int value) {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);
// hier setze ich die aktuelle Bildschirmhelligkeit programmgesteuert
Window window = ((Activity) getContext()).getWindow();
LayoutParams layoutpars = window.getAttributes();
layoutpars.screenBrightness = value / (float) MAX_BRIGHTNESS_VALUE;
window.setAttributes(layoutpars);
}
private int getBrightness() {
try {
return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
e.printStackTrace();
return MAX_BRIGHTNESS_VALUE;
}
}
private void setAutomaticBrightness() {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
private void setManualBrightness() {
Settings.System.putInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
private int getBrightnessMode() {
try {
return Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
} catch (SettingNotFoundException e) {
e.printStackTrace();
return Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
}
}
In meinem AndroidManifest.xml habe ich
Weiß jemand, was hier passiert? Ich habe einige Threads auf Stack Overflow mit ähnlichen Problemen gesehen, aber keiner von ihnen hat eine hilfreiche Antwort erhalten.