Android 如何打开和关闭自动亮度?(不再重复)
我只是想打开和关闭自动亮度。 我从这段代码开始(在onCreate方法中) 这似乎不起作用。在onResume()中也会再次调用setAutoBrightnessMode()方法,但结果相同。 不管怎样,如果有人觉得这个问题是多余的,我很抱歉,但是其他的帖子并没有把我带到我需要去的地方 (FWIW-我在我的旧Droid X和Galaxy Nexus上测试这个,而不是在模拟器上) 已编辑-更新此信息: 我现在99%确信,我没有看到设置面板和桌面小部件中反映的对自动亮度模式的任何更改,即使我实际上可能正在更改它的值。 部分问题是我不知道如何准确地确定自动亮度是否开启 例如,屏幕是否快速且明显地改变?我一直期待着亮度会随着环境的变化而立即发生可见的变化——但也许这些变化是微妙的?在更长的时间里?或者,在亮度变化之前,环境变化需要30秒或更长时间 有人能建议我如何追踪这个吗?我已尝试查询Settings.System.SCREEN\u BRIGHTNESS\u MODE常量-将此方法连接到文本字段:Android 如何打开和关闭自动亮度?(不再重复),android,settings,Android,Settings,我只是想打开和关闭自动亮度。 我从这段代码开始(在onCreate方法中) 这似乎不起作用。在onResume()中也会再次调用setAutoBrightnessMode()方法,但结果相同。 不管怎样,如果有人觉得这个问题是多余的,我很抱歉,但是其他的帖子并没有把我带到我需要去的地方 (FWIW-我在我的旧Droid X和Galaxy Nexus上测试这个,而不是在模拟器上) 已编辑-更新此信息: 我现在99%确信,我没有看到设置面板和桌面小部件中反映的对自动亮度模式的任何更改,即使我实际上可
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中文平板电脑上进行了测试。
添加到清单权限:
<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;
}
}
void setAutoBrightness(布尔值){
如果(值){
Settings.System.putInt(getContentResolver(),屏幕亮度模式,屏幕亮度模式自动);
}否则{
Settings.System.putInt(getContentResolver()、屏幕亮度模式、屏幕亮度模式手动);
}
//亮度更改后,我们需要“刷新”当前应用程序的亮度
如果(已检查){
刷新亮度(-1);
}否则{
刷新亮度(getBrightnessLevel());
}
}
专用亮度(浮动亮度){
WindowManager.LayoutParams lp=getWindow().getAttributes();
如果(亮度<0){
lp.screenBrightness=WindowManager.LayoutParams.BRIGHTNESS\u OVERRIDE\u NONE;
}否则{
lp.屏幕亮度=亮度;
}
getWindow().setAttributes(lp);
}
int getBrightnessLevel(){
试一试{
int value=Settings.System.getInt(getContentResolver(),屏幕亮度);
//将亮度级别转换为范围0..1
value=value/255;
返回值;
}捕获(设置NotFound异常e){
返回0;
}
}
nothing??我希望这是件简单的事情!我想你必须在android清单中授予适当的权限(例如,android.permission.WRITE\u设置
)同样。谢谢-我做到了。应该提到这一点。谢谢你回答Sergey,但我不确定这是否是我问题的解决方案。我很容易让屏幕/窗口反映我使用seekBar对其所做的任何更改,屏幕的亮度会立即改变,而无需手动刷新窗口属性。r就自动亮度而言,我的代码与您的setAutoBrightness方法完全相同,它似乎没有任何作用。我一直试图在设置亮度值后使用您的“刷新”想法,但它似乎对自动亮度是否处于自动模式没有任何影响,正如我上面提到的谢尔盖-你好吗你能分辨出模式是否被切换了吗?我只是在看设置和/或我的电源设置小部件…但我开始认为它可能没有反映出变化。所以我试着测试它,我自己从黑暗移动到光明-但我不知道它改变亮度的速度有多快等-你可以在上面看到完整的解释对我所问问题的剖析。这里的“isChecked”是什么意思?你在哪里设置这个变量?
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;
}
}