2011-02-15 72 views
1

我正面临使用通过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秒),就像我收到短信时一样,最佳解决方案是什么?

任何帮助将不胜感激,并提前致谢!

回答

1

我想你提供了答案:

  1. 不要放开之后锁定
  2. 发生10/15秒设置新的报警后
  3. 释放之后锁定功能时,第二个报警触发
2

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

API文档中有一行指出: “此外,还可以添加两个标志,这些标志只影响屏幕的行为,这些标志与PARTIAL_WAKE_LOCK结合使用时不起作用。我想知道SCREEN_DIM_WAKE_LOCK是否被视为部分唤醒锁? (无证'功能')

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

相关问题