我只是试图打开和关闭自动亮度。
我从这段代码开始(在onCreate方法内部)
final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.brightToggle);
// display auto brightness state
final ToggleButton autoBrightToggle = (ToggleButton) findViewById(R.id.autoToggle);
autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));
autoBrightToggle.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (autoBrightToggle.isChecked()) {
setAutoBright(true);
} else {
setAutoBright(false);
}
}
}); // end anonymous OnClickListener function
// toggle the brightness mode
private void setAutoBright(boolean mode) {
if (mode) {
Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));
} else {
Settings.System.putInt(cr, SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
autoOnOrOff.setText(String.valueOf(getAutoBrightnessMode()));
}
}
这似乎不起作用。 setAutoBrightnessMode()方法也将在onResume()中再次调用,但具有相同的非结果。
无论如何,对不起,如果有人觉得这个问题很多余,但其他帖子没有告诉我我需要去的地方!
(FWIW-我正在我的旧Droid X和Galaxy Nexus(而不是仿真器)上对此进行测试)
编辑-此更新:
我现在有99%的确定我不会在“设置”面板和桌面小部件中看到对自动亮度模式的任何更改-即使实际上可能是在更改它的值。
问题的一部分是我不知道如何准确确定自动亮度是否打开!
例如,屏幕是否在快速,明显地改变?我一直期望根据环境亮度会立即出现可见变化-但也许这种变化是微妙的?并在更长的时间内?还是可能需要30秒或更长时间的环境变化才能改变亮度?
有人可以建议我如何跟踪吗?我尝试查询Settings.System.SCREEN_BRIGHTNESS_MODE常量-将此方法挂接到文本字段:
private int getAutoBrightnessMode() {
try {
int brightnessMode = Settings.System.getInt(cr, SCREEN_BRIGHTNESS_MODE);
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
int brightnessMode = -10000;
}
return brightnessMode;
}
但是,即使在onResume()之后,它始终读取为0。 :-((
我知道这是一个简单的过程,但是我想自己学习这些东西,并且几乎没有接受过正式的CS培训...所以我只能说,对此我感到非常沮丧,并且觉得我我已经把自己逼到了一个角落,在这一点上,我感到非常恼火,以至于我再也无法直截了当了。
因此,帮助将是巨大的。
最佳答案
我在我的应用程序中使用以下方法。在HTC Desire HD和成对的noname中国平板电脑上进行了测试。
添加到 list 权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
并使用以下代码切换自动亮度。代码中有一个技巧:我们需要手动“刷新”应用程序的亮度,因为它不会自动更改。可能是您的问题所在。
void setAutoBrightness(boolean value) {
if (value) {
Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
} else {
Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
}
// After brightness change we need to "refresh" current app brightness
if (isChecked) {
refreshBrightness(-1);
} else {
refreshBrightness(getBrightnessLevel());
}
}
private void refreshBrightness(float brightness) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
if (brightness < 0) {
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
} else {
lp.screenBrightness = brightness;
}
getWindow().setAttributes(lp);
}
int getBrightnessLevel() {
try {
int value = Settings.System.getInt(getContentResolver(), SCREEN_BRIGHTNESS);
// convert brightness level to range 0..1
value = value / 255;
return value;
} catch (SettingNotFoundException e) {
return 0;
}
}
关于android - 如何打开和关闭自动亮度? (不再重复),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9339430/