在各种状态

时间:2015-11-16 18:16:04

标签: android lockscreen wakelock android-wake-lock keyguard

我有一个应用程序通常是使用设备(Android 4.2及更高版本)的唯一应用程序。在以下情况下,它需要能够接受音量摇杆的输入:

  1. app位于前台
  2. app在后台
  3. 已锁定屏幕或键盘锁
  4. 屏幕已关闭(即空闲模式)。
  5. (1)可以通过侦听Activity

    中的KeyDown事件轻松解决

    (2)可以通过监听android.media.VOLUME_CHANGED_ACTION来部分解决(是的,我知道它不是公共API,但它适用于我设法测试它的所有设备,我找不到替代品)。但是在我的Nexus 5(Android 6.0)上,首次按下摇杆时,它会短时间显示音量对话框,需要第二次按下才能将摇杆事件传递给我的应用程序。我还没有设法确定这个版本的Android开始发生了什么,但我想了解如何确保第一个事件传递到我的应用程序以用于所有Android版本。

    (3)可以通过使用WindowManager FLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKED来缓解,以避免锁定屏幕和键盘锁

    当app在前台时,使用WindowManager FLAG_KEEP_SCREEN_ON忽略显示超时,可以部分缓解

    (4)。但遗憾的是,用户不小心手动关闭屏幕是一种常见事件,即使使用WAKE_LOCK也不允许在屏幕空闲时通过android.media.VOLUME_CHANGED_ACTION接收音量摇杆事件。

    所以问题是:

    1. 如何确保首次按下音量摇杆传递到我的应用程序,而不是被音量对话框捕获和使用?
    2. 如何在屏幕空闲时收到音量摇杆事件?

0 个答案:

没有答案