使用WakeLock时屏幕打开然后关闭太快(没有保持几秒钟)

时间:2011-02-15 12:20:24

标签: android

我在通过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秒),就像我收到短信一样,实现这一目标的最佳解决方案是什么?

非常感谢任何帮助,并提前感谢!

2 个答案:

答案 0 :(得分:2)

我有一个类似的情况,因为我的应用程序在我发布WakeLock后立即关闭。我认为我对你应用了相同的逻辑,但我使用了FULL_WAKE_LOCK和其他选项PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE。在我的“GameTime”计时器应用程序中,这似乎对我有用。我知道这是在一段时间之前发布的,但也许它可以为某人提供一些帮助!

API文档中有一行说明: “此外,您还可以添加两个标志,这些标志仅影响屏幕的行为。当与PARTIAL_WAKE_LOCK结合使用时,这些标志无效。”我想知道SCREEN_DIM_WAKE_LOCK是否算作PARTIAL WAKE LOCK? (未记录的'特征')

API位于此处:http://developer.android.com/reference/android/os/PowerManager.html

答案 1 :(得分:1)

我认为你提供了答案:

  1. 不要释放唤醒锁
  2. 将新闹钟设置为10/15秒后发生
  3. 触发第二个警报时释放唤醒锁定