改变活动后亮度恢复正常

时间:2018-06-15 16:51:06

标签: android brightness screen-brightness

我试图在' 全亮度'之间切换。和' 手机正常亮度'在我的主要活动中使用使用切换按钮。 我使用以下代码成功处理了亮度切换:

switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean bChecked) {
            if (bChecked) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                WindowManager.LayoutParams params = getWindow().getAttributes();
                params.screenBrightness = 1.0f;
                getWindow().setAttributes(params);
            } else {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                WindowManager.LayoutParams params = getWindow().getAttributes();
                params.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
                getWindow().setAttributes(params);
            }
        }
    });

    if (switchButton.isChecked()) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = 1.0f;
        getWindow().setAttributes(params);
    } else {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
        getWindow().setAttributes(params);
    }

问题是,

切换到“完全亮度”后,当我更改活动时,亮度会恢复正常。 现在,我如何跟踪亮度设置'来自' 主要活动'并将其应用于应用程序的其他活动?

N.B。 我不想改变系统亮度。亮度只会在使用应用程序时发生变化。

先谢谢。

2 个答案:

答案 0 :(得分:1)

确定。 终于解决了我的问题。

  1. 我创建了一个具有使用SharedPreferences来处理状态的亮度控制逻辑的类。 代码:

     if (br.getString("set", "").equals("1")) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = 1.0f;
        getWindow().setAttributes(params);
    } else {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
        getWindow().setAttributes(params);
    }
    
  2. 然后使用活动扩展类并在onCreate方法中初始化SharedPreferences。

     br = getSharedPreferences("br", Activity.MODE_PRIVATE);
    
  3. 感谢@ 0X0nosugar的想法。

答案 1 :(得分:0)

如果您想让它超出您的活动效果,您需要持有SCREEN_BRIGHT_WAKE_LOCK。您在上面使用的方法适用于前景窗口,当您的活动消失后不再适用。

注意Android在使用唤醒锁时通常会皱眉,因为它很容易搞砸并且不会释放它们,浪费设备电池。他们推荐使用窗口参数版本,因为当用户离开活动时它会自动释放。