【发布时间】:2011-02-15 12:20:24
【问题描述】:
我在通过 PowerManager API 使用唤醒锁时遇到问题。 目前,我有一个服务和一个广播接收器。
我的服务有两个主要角色:
- 第一个,它在特定时间创建警报(我的接收器从系统接收启动完成意图并启动服务以创建下一个警报)
- 第二个,接收器对警报做出反应(在 RTC_WAKEUP 模式下)并启动服务以通过打开屏幕播放通知。
我正在使用 Mark murphy 的 cwac-wakeful 模块来实现这一点,它工作得很好。
问题是:屏幕开关太快,用户看不到。
以下是启动警报意图时发生的情况(对于第二个角色/案例):
- 调用广播接收器的 OnReceive 方法
- 它调用 WakefulIntentService.sendWakefulWork
- 我的 wakeLock 已被获取(带有 SCREEN_DIM_WAKE_LOCK | ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE 标志)
- 屏幕已打开
- 服务启动:创建并显示通知
- 服务结束
- 唤醒锁被释放
- 屏幕立即关闭(释放几秒钟后不亮)
正如您可能已经理解的那样。问题是,服务完成后锁被释放得太快,所以我只能看到屏幕在不到一秒钟的时间内打开和关闭。 我认为使用 ON_AFTER_RELEASE (文档说:“如果设置了此标志,则在释放 WakeLock 时将重置用户活动计时器,从而使照明保持更长的时间。如果您可以使用它来减少闪烁在唤醒锁定条件之间循环。") 会解决我的问题,但没有。
谷歌搜索时,我发现了一个解决方案:
- 不只是释放唤醒锁 服务结束后,但 在接下来启动另一个警报 15/20 秒(从服务完成开始) 这将释放唤醒锁(通过 接收器/服务)并关闭 屏幕。不知道好不好 解决方案,看起来很复杂 我这个用例
那么我的问题是我怎样才能让屏幕保持几秒钟(比如 10/15 秒),就像我收到一条短信一样,实现这一目标的最佳解决方案是什么?
任何帮助将不胜感激,并在此先感谢!
【问题讨论】:
标签: android