我有一个应用程序通常是使用设备(Android 4.2及更高版本)的唯一应用程序。在以下情况下,它需要能够接受音量摇杆的输入:
(1)可以通过侦听Activity
中的KeyDown事件轻松解决(2)可以通过监听android.media.VOLUME_CHANGED_ACTION
来部分解决(是的,我知道它不是公共API,但它适用于我设法测试它的所有设备,我找不到替代品)。但是在我的Nexus 5(Android 6.0)上,首次按下摇杆时,它会短时间显示音量对话框,需要第二次按下才能将摇杆事件传递给我的应用程序。我还没有设法确定这个版本的Android开始发生了什么,但我想了解如何确保第一个事件传递到我的应用程序以用于所有Android版本。
(3)可以通过使用WindowManager FLAG_DISMISS_KEYGUARD
和FLAG_SHOW_WHEN_LOCKED
来缓解,以避免锁定屏幕和键盘锁
FLAG_KEEP_SCREEN_ON
忽略显示超时,可以部分缓解(4)。但遗憾的是,用户不小心手动关闭屏幕是一种常见事件,即使使用WAKE_LOCK
也不允许在屏幕空闲时通过android.media.VOLUME_CHANGED_ACTION
接收音量摇杆事件。
所以问题是: