我写了一个简单的闹钟风格的应用程序,我运行在我的(jailbroken)nook simple touch(又名nst)上,在android 2.1下。
当计划的报警时间到达时,我的应用程序需要唤醒NST并显示一页HTML内容。我使用AlarmManager在正确的时间获得回调,它似乎像预期的那样工作——几乎。
当空闲时间足够长,NST启动了锁屏模式(即,它自动显示著名作者的漫画)时,就会出现问题。我找不到一种编程方法来关闭锁屏,这样我的html内容就可以看到了。我可以看到我的报警回调例程在预期的时间运行(通过eclipse中的logcat视图,在我用adb重新连接到nst之后),并且在我用手指手动“拖动以解锁”之后,我可以看到我的应用程序的窗口按预期更新,但是我需要在报警事件发生时显示文本,而不仅仅是在用户解锁之后装置。我尝试了下面显示的代码(基于其他stackoverflow答案),但没有帮助。
有什么办法吗?(技术上可行的一个解决方案是始终在我的窗口上设置flag_keep_screen_,这样著名的author lock screen就不会出现在第一个位置,但这会使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);
}
最佳答案
哈,我知道(在previous StackOverflow answers的帮助下)我做错了什么。
问题如上述链接所述——AlarmManager按预期调用我的BroadcastReceiver,然后我的BroadcastReceiver将向我的AlarmHandler发送一条消息(如我从中抄袭的报警示例所示)。但是nook会在onreceive()返回后立即返回睡眠状态,这意味着辅助处理程序从未被调用,因此我的wakeupthescreen()方法没有被执行。
我移动了wakeupthescreen()调用,现在直接从onReceived()方法调用它,现在wakeup按预期工作。:^)