기본 Android 밝기 설정 대화 상자와 유사하게 작동해야하는 DialogPreference를 작성하는 코드를 작성했습니다.자동 모드를 사용하는 동안 프로그래밍 방식으로 밝기를 변경하면 Android에 아무런 영향이 없습니다.
밝기 모드가 Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
으로 설정되어 있으면 완벽하게 작동합니다. 그러나 모드를 Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
으로 변경하면 휴대 전화 밝기가 Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)
값을 고려하지 않습니다.
내가 당신에게 예를 보여 드리죠 :
- 내가 자동으로 255 모드로 안드로이드 설정에서 밝기를 설정합니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
- Android 설정에서 밝기를 100으로 설정하고 모드를 수동으로 설정했습니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
- 내 앱의 밝기를 50으로 설정했으며 모드는 여전히 수동입니다. 변경 사항은 전화 (내 앱은 물론)에 반영됩니다.
- 내 앱의 밝기를 50으로 설정하고 모드를 자동으로 설정했습니다. 프로그래밍 방식으로 현재 화면 밝기를 50으로 변경했지만 나머지 앱 및 휴대 전화 자체 (예 : 휴대 전화 설정 및 집)는 밝기 255와 자동 모드 (Android 설정에서 확인할 수 있음)가 있습니다. 동시에
Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREEN_BRIGHTNESS)
은 여전히 50을 반환합니다.
다음은 내 코드입니다. DialogPreference를 확장하는 클래스에 있으므로 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);
// here I set current screen brightness programmatically
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;
}
}
내의 AndroidManifest.xml에 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
이
사람이 무슨 일이 일어나고 있는지 알고 있나요? 비슷한 문제가있는 Stack Overflow 스레드를 보았지만 도움이되는 대답이 하나도 없습니다.