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

标签 android

我在通过 PowerManager API 使用唤醒锁时遇到问题。 目前,我有一个服务和一个广播接收器。

我的服务有两个主要角色:

  • 第一个,它在特定时间创建一个警报(我的接收器从系统接收到启动完成的 Intent 并启动服务以创建下一个警报)
  • 第二个,接收器对警报作出 react (在 RTC_WAKEUP 模式下)并启动服务以通过打开屏幕播放通知。

我正在使用 Mark murphy 的 cwac-wakeful 模块来实现这一点,它工作得很好。

问题是:屏幕打开和关闭的速度太快,用户看不到。

这是启动警报 Intent 时发生的事情(对于第二个角色/案例):

  • 调用广播接收器的OnReceive方法
  • 它调用 WakefulIntentService.sendWakefulWork
  • 我的唤醒锁已获取(带有 SCREEN_DIM_WAKE_LOCK | ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE 标志)
  • 屏幕已打开
  • 启动服务:创建并显示通知
  • 服务结束
  • 释放唤醒锁
  • 屏幕立即关闭(松开几秒钟后不亮)

正如您可能已经理解的那样。问题是,服务完成后锁释放得太快,所以我只能看到屏幕在不到一秒的时间内打开和关闭。 我认为使用 ON_AFTER_RELEASE(文档说:“如果设置了此标志,则释放 WakeLock 时将重置用户 Activity 计时器,从而导致照明保持更长的时间。如果您可以使用它来减少闪烁在唤醒锁定条件之间循环。”) 本来可以解决我的问题,但没有。

谷歌搜索时,我找到了一个解决方案,包括:

  • 不只是释放唤醒锁 服务结束后,但 下一次启动另一个警报 15/20 秒(从服务结束时开始) 这将释放唤醒锁(通过 接收器/服务)并关闭 屏幕。我不知道这是否好 解决方案,它似乎很复杂 我为这个用例

然后我的问题是如何让屏幕保持开启几秒钟(例如 10/15 秒),就像当我收到一条短信时,实现该目标的最佳解决方案是什么?

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

最佳答案

我遇到过类似的情况,我的应用程序在我释放 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

关于android - 使用 WakeLock 时屏幕打开然后关闭的速度太快(没有保持打开几秒钟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003558/

相关文章:

java - 每秒更新通知文本

android - NDK 需要 gnuSTL_static std::string 而不是 std::_ndk1::string

android - 使用mikepenz/MaterialDrawer库解决依赖项时出错

android - 使用 glide 在 ActionBar 上设置图标

java - 通过服务进行震动检测

android - 如何/在哪里保存私有(private) JSON 文件并将其 bundle 在我的应用程序中?

java - 为一堆 TextView 实现 SearchView

java - 切换到 Display ConstrainedLayout 不起作用

android - 如何将ExtendedCalendarView添加到Android Gradle项目

android - 如何从 picasso 的缓存中检索图像?