我正面临使用通过PowerManager API唤醒锁定的问题。 目前,我有一个服务和一个广播接收器。使用WakeLock时屏幕打开,然后关闭太快(几秒钟后不再打开)
我的服务有2个主要作用:
- 首先一个,它产生在特定时间报警(我的接收器从系统接收引导完成的意图和启动服务来创建一个报警)
- 第二种方法是,接收器对闹钟(在RTC_WAKEUP模式下)做出反应,然后启动服务以打开屏幕播放通知。
我使用Mark Murphy的cwac-wakeful模块来实现这一点,它工作得很好。
问题是:屏幕打开和关闭太快,用户无法看到它。
这里是当报警意图启动(第二角色/时)发生的事情:
- 广播接收的onReceive方法被称为
- 它调用WakefulIntentService.sendWakefulWork
- 我唤醒锁定的已获得(使用SCREEN_DIM_WAKE_LOCK | ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE标志)
- 屏幕已打开
- 服务已启动:通知是crea泰德和显示
- 服务完成
- 唤醒锁被释放
- 屏幕被立刻关闭(发行后未在几秒钟)
正如你可能已经明白。问题是,服务完成后锁定释放得太快,所以我只能看到屏幕在少于一秒内打开和关闭。 我以为使用ON_AFTER_RELEASE(该文档说:“如果设置此标志,当WakeLock被释放时,用户活动计时器将被重置,从而导致照明保持更长的时间。这可以用来减少闪烁if你在唤醒锁定条件之间循环。“)将解决我的问题,但不是。
谷歌上搜索的时候,我发现,包括在一个解决方案:
- 没有释放之后仅锁定 服务结束后,但 在启动另一个报警下一 15/20秒(自服务结束) (通过 接收器/服务)并且关闭 屏幕,将释放唤醒锁。我不知道,如果it'a好 的解决方案,它似乎复杂 我这个用例
然后我的问题是如何保持我在屏幕上几秒钟(如10/15秒),就像我收到短信时一样,最佳解决方案是什么?
任何帮助将不胜感激,并提前致谢!