1

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

  1. 应用程序在前台
  2. 应用程序在后台
  3. 锁屏或键盘锁已启用
  4. 屏幕已关闭(即空闲模式)。

(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避免锁屏和键盘保护

(4) 可以通过使用 WindowManagerFLAG_KEEP_SCREEN_ON在应用程序处于前台时忽略显示超时来部分缓解。但不幸的是,用户不小心手动关闭屏幕电源是很常见的事件,即使使用 aWAKE_LOCK也不允许 android.media.VOLUME_CHANGED_ACTION在屏幕空闲时接收音量摇杆事件。

所以问题是:

  1. 如何确保第一次按下音量键会传递给我的应用程序,而不是被音量对话框捕获和消耗?
  2. 屏幕空闲时如何接收音量摇杆事件?
4

0 回答 0