Android - 关闭屏幕而不进入待机模式

时间:2013-01-11 08:38:53

标签: android screen

我知道这个问题已被问过很多次,但从未得到满意的回答。

我的问题如下:

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

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

当预定时间结束时,我会显示一个倒计时对话框,告知用户如果他没有按“取消”,显示屏将在10秒后关闭。

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

关闭我使用过:

Window mywindow = getWindow();

WindowManager.LayoutParams lp = mywindow.getAttributes();

lp.screenBrightness = 0.0f;

mywindow.setAttributes(lp);

是否有可能在不进入StandBy-Mode(暂停活动)的情况下使显示屏变暗。

我的目标是用户应该只需点按显示屏即可再次亮起屏幕。因此,活动必须保持活跃状态​​。

有人提出了类似的问题here

由于这个问题差不多已经有一年了,我希望也许有人能够同时解决这个问题。

很多问候

Siggy

2 个答案:

答案 0 :(得分: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;
}

也许这有助于将来遇到类似问题的人。

答案 1 :(得分:2)

注意:我无法使用WAKELOCK

我找到了一个解决方法,涉及更改SCREEN_OFF_TIMEOUT。使用以下 实现它的代码。

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

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

现在您可能会对此带来的SYSTEM-WIDE更改感到困扰。要解决这个问题,您可以获取默认的screen_timeout_time并将其保存到变量中,然后在活动的finish()处设置系统的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();
}