如何打开和关闭自动亮度? (不重复)

我只是试图打开和关闭自动亮度。 我开始使用这段代码(在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()中再次调用,但具有相同的非结果。 无论如何,如果有人觉得这个问题多余,我很抱歉,但其他post没有让我到达我需要去的地方!

(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; } 

但它总是读取0,即使在onResume()之后也是如此。 : – ((

我知道这是一个简单的程序,但我正在尝试自己学习这些东西,并且几乎没有正式的CS培训…所以我只能说我对此感到非常沮丧,感觉就像我我已经把自己投入了一个角落,在这一点上,我很生气,我不能再思考了。

所以帮助会很棒。

我在我的应用程序中使用以下方法。 在HTC Desire HD和一对noname中国平板电脑上测试。
添加到清单权限:

  

并使用下面的代码切换自动亮度。 代码中有一个技巧:我们需要手动“刷新”应用程序的亮度,因为它不会自动更改。 可能是你的问题。

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