2

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

当预定的闹钟时间到达时,我的应用程序需要唤醒 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);
}
4

1 回答 1

3

哈,我发现(在以前的 StackOverflow 答案中提供了更多帮助)我做错了什么。

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

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

于 2012-03-11T03:06:13.490 回答