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

时间:2012-02-18 07:21:14

标签: android settings

我只是试图打开和关闭自动亮度。 我开始使用这段代码(在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培训......所以我只能说我对此感到非常沮丧和感觉就像我已经在一个角落里工作一样,在这一点上我很生气,我不能再思考了。

所以帮助会很棒。

1 个答案:

答案 0 :(得分:8)

我在我的应用程序中使用以下方法。在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;
    }
}