11

我有一个应用程序可以使用 4 小时,但用户只需每 5 分钟输入一次或阅读屏幕。让手机进入睡眠状态并锁定屏幕有点烦人。所以我有两个选择:

  1. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);它不会锁定屏幕,但屏幕总是很亮,我想在没有活动时调暗它。仅仅因为电池寿命,或者这 4 小时没有那么重要?

  2. 一个唤醒锁SCREEN_DIM_WAKE_LOCK ,它和我想要的一样好,但我被告知宁愿使用上面的选项 1。

我可以在没有唤醒锁的情况下以某种方式实现想要的目标吗?

4

3 回答 3

14

您可以使用:

WindowManager.LayoutParams lp = getWindow().getAttributes();  
lp.dimAmount=1.0f; 
getWindow().setAttributes(lp);  

可以根据需要调暗/取消调暗屏幕。

lp.dimAmount=1.0f将使屏幕完全变暗,但您可以根据自己的意愿将其设置为从 0(完全不暗淡)到 1.0f 的值。

您可以设置一个计时器在 5 分钟不活动后调用它,然后在任何触摸事件或类似事件上“重新打开”屏幕。

于 2011-03-25T16:09:07.680 回答
5

即使是昏暗的屏幕也会在 4 小时内消耗大量电池。你真的不想那样保持屏幕亮着。我认为您最好使用 FLAG_SHOW_WHEN_LOCKED,允许屏幕关闭,但让用户在重新打开应用程序时立即进入您的应用程序,而无需先通过锁定屏幕。

如果你真的需要保持屏幕昏暗,你可以使用 SCREEN_DIM_WAKE_LOCK。如果您想要更多控制,您也可以尝试直接使用 WindowManager.LayoutParams.screenBrightness 设置屏幕亮度。

于 2011-01-26T15:16:07.870 回答
3

这是否回答了您从 2011 年 1 月 26 日 15:28 开始的最后一个问题

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
  wl.acquire();
   ..screen will stay on during this section..
 wl.release();

请参阅此处了解更多信息:http: //developer.android.com/reference/android/os/PowerManager.html

所以我的意思是,您应该在启动新活动之前获取电源管理器唤醒锁定以防止屏幕锁定。完成后释放。


您也可以使用 lp.screenBrightness 代替 lp.dimAmount

并确保输入高于 0 的值以避免屏幕锁定:

lp.screenBrightness = 0.01f + value / 100.0f; 
于 2014-03-17T13:44:50.450 回答