如何以编程方式关闭Android上的屏幕保护程序/锁定屏幕(Nook Simple Touch)

时间:2012-03-10 23:05:45

标签: android screensaver nook

我在Android 2.1下编写了一个简单的闹钟式应用程序,我在我的(越狱)Nook Simple Touch(又名NST)上运行。

当预定的闹钟时间到来时,我的应用程序需要唤醒NST并显示一页HTML内容。我使用AlarmManager在正确的时间获得回调,它似乎按预期工作 - 差不多。

当NST已经激活其锁定屏幕模式(即它自动显示着名作者的漫画)的足够空闲时间时,会出现问题。我找不到以编程方式关闭锁定屏幕以便我的HTML内容可见。我可以看到我的报警回调例程在预期的时间运行(通过Eclipse中的LogCat视图,在我用adb重新连接到NST之后),并且在用手指“手动拖动解锁”后,我可以看到我的应用程序的窗口按预期更新,但我需要在发生警报事件时使文本变为可见,而不是在用户解锁设备后。我尝试了下面显示的代码(基于其他StackOverflow答案),但它没有帮助。

关于如何做到这一点的任何想法? (技术上有效的一个解决方案是始终在我的窗口上设置FLAG_KEEP_SCREEN_ON,这样就不会出现着名的作者锁定屏幕,但这会使NST保持清醒状态,因此它很快耗尽了电池电量,所以我想尽可能避免这种情况)

private void wakeUpTheScreen()
{
    Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}

1 个答案:

答案 0 :(得分:3)

哈,我想出了(previous StackOverflow answers的一些帮助)我做错了什么。

问题如上面的链接所述 - AlarmManager正在按预期调用我的BroadcastReceiver,然后我的BroadcastReceiver将sendMessage()一条消息发送到我的AlarmHandler(如我所说的报警示例所示)。但是,在onReceive()返回后Nook会立即重新入睡,这意味着辅助处理程序永远不会被调用,因此我的wakeUpTheScreen()方法没有被执行。

我移动了wakeUpTheScreen()调用,以便现在直接从onReceived()方法调用它,现在唤醒按预期工作。 :^)