11

我知道这个问题被问了很多次,但从来没有得到满意的回答。

我的问题如下:

我有一个活动可以防止屏幕在预定义的时间内关闭。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

当预定义的时间结束时,我会显示一个带有倒计时的对话框,通知用户如果他不按“取消”,显示器将在 10 秒内关闭。

我设法关闭了显示屏,但手机总是切换到待机模式。

为了关闭我使用:

Window mywindow = getWindow();

WindowManager.LayoutParams lp = mywindow.getAttributes();

lp.screenBrightness = 0.0f;

mywindow.setAttributes(lp);

是否有可能在不进入待机模式(暂停活动)的情况下使显示屏完全变暗。

我的目标是用户应该能够通过点击显示屏再次点亮屏幕。所以活动必须保持在活动状态。

一个类似的问题已经被问到here

由于这个问题已经将近一年了,我希望也许有人在此期间设法解决了这个问题。

很多问候

西吉

4

2 回答 2

8

似乎无法仅通过触摸显示屏来关闭屏幕并重新激活。

我现在的新方法:

private WakeLock screenWakeLock;

PowerManager pm = PowerManager.getSystemService(Context.POWER_SERVICE);
screenWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                                "screenWakeLock");
screenWakeLock.acquire();

PARTIAL_WAKE_LOCK 保持 CPU 运行,但允许显示器关闭。

当按下电源或主页按钮时,显示屏再次打开并且活动再次可见(无需“滑动解锁”或其他)。

不要忘记释放screenWakeLock.

就我而言,我在onResume()活动中做到了:

if (screenWakeLock != null) {
   if(screenWakeLock.isHeld())
      screenWakeLock.release();
   screenWakeLock = null;
}

也许这可以帮助将来遇到类似问题的人。

于 2013-01-11T14:32:01.680 回答
2

注意:我无法使用 WAKELOCK

我想出了一个解决方法,它涉及更改 SCREEN_OFF_TIMEOUT。使用下面的代码来实现它。

Settings.System.putInt(getContentResolver(), 
                           Settings.System.SCREEN_OFF_TIMEOUT, 10);

这会将 10 毫秒设置为 screen_timeout SYSTEM-WIDE 的超时。

现在您可能会被由此带来的 SYSTEM-WIDE 更改所困扰。要解决这个问题,您可以获取默认的 screen_timeout_time 并将其保存到一个变量中,然后在您的活动的完成()处设置系统的 SCREEN_OFF_TIMEOUT。

在设置 10ms 作为我们的 screen_timeout 之前,得到 SCREEN_OFF_TIMEOUT,

int defaultScreenTimeout= android.provider.Settings.
      System.getInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT,-1);

现在,当您完成更改或活动结束时,您可以将 SCREEN_OFF_TIMEOUT 设置回来。

@Override
public void finish(){
    Settings.System.putInt(getContentResolver(), 
                      Settings.System.SCREEN_OFF_TIMEOUT, defaultScreenTimeout);
super.finish();
}
于 2014-05-23T10:58:05.297 回答