【问题标题】:Brightness goes normal after changing activity改变活动后亮度恢复正常
【发布时间】:2018-06-15 16:51:06
【问题描述】:

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

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

问题是,

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

注意 我不想更改系统亮度。亮度只会在使用应用时改变。

提前致谢。

【问题讨论】:

  • 一个选项:将亮度设置写入SharedPreferences并在Activity的onCreate()中读取
  • 您可以创建一个全局变量来存储亮度设置。
  • 非常感谢你的想法 :) @0X0nosugar
  • 不客气 :) - 我刚刚在我的其他评论中解释说,可以编写/接受您自己的答案。带有解决方案的代码 sn-p 确实属于答案而不是问题,所以我对您的编辑进行了回滚
  • 没关系。我很感激。我会标记答案。再次感谢您的想法 :) @0X0nosugar

标签: android brightness screen-brightness


【解决方案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);
    

感谢@0X0nosugar 的想法。

【讨论】:

  • 你为什么不更新你的答案以包含固定代码,比如之前和之后?尽管您(还)没有这样做,但当人们接受自己的答案时(至少对我而言)似乎很奇怪
  • 嗨。感谢您的反馈意见。我已经用解决方案更新了我的帖子。是 @0X0nosugar 给了我这个想法。我只是按照他说的去做。看看他的评论。谢谢。
  • 是的,共享首选项非常适合在 Android 上存储设置,这是一个很好的建议。感谢您更新帖子,这也将使人们在将来看到此主题时更容易阅读。
  • @ViaTech - 据我所知,在 Stack Overflow 上通过answering your own question 分享问题的解决方案是非常好的。接受最佳答案也是可以的,不管它是不是你的。不要忘记 Stack Overflow 旨在帮助未来的读者,帮助他们的一种方法是通过投票/接受有用的帖子向他们展示对他人有用的东西。
  • @0X0nosugar,是的,我所说的对于发布您自己的答案或多或少是主观的,我在需要时也这样做了,我只是说作为读者,如果OP 在原帖中回答了自己的问题
【解决方案2】:

如果您希望 SCREEN_BRIGHT_WAKE_LOCK 对您的活动产生影响,您需要持有它。您上面使用的方法适用于前台窗口,当您的活动消失时,不再适用。

注意,Android 通常不赞成使用唤醒锁,因为它很容易搞砸而不释放它们,从而浪费设备电池。他们推荐 window 参数版本,因为它会在用户离开活动时自动释放。

【讨论】:

  • 您好,感谢您提供宝贵的信息。您能否参考任何示例,以便我对 WAKE_LOCK 有一个清晰的了解?我不熟悉它。 @JeffreyBlattman
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多