【问题标题】:Screen on and then off too fast when using WakeLock (not remaining on for a few second)使用 WakeLock 时屏幕打开然后关闭太快(不会保持打开几秒钟)
【发布时间】: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


    【解决方案1】:

    我有类似的情况,我的应用在我释放 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

    【讨论】:

      【解决方案2】:

      我想你提供了答案:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 2017-04-03
        相关资源
        最近更新 更多