我只是试图打开和关闭自动亮度。
我从这段代码开始(在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/

10-12 17:24