Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨一系列状态接受Android volume rocker输入_Android_Lockscreen_Wakelock_Android Wake Lock_Keyguard - Fatal编程技术网

跨一系列状态接受Android volume rocker输入

跨一系列状态接受Android volume rocker输入,android,lockscreen,wakelock,android-wake-lock,keyguard,Android,Lockscreen,Wakelock,Android Wake Lock,Keyguard,我有一个应用程序,它通常是唯一一个使用设备(Android 4.2及以上)的应用程序。在以下情况下,它需要能够接受来自音量调节器的输入: 应用程序位于前台 应用程序在后台 锁屏或键盘已接合 屏幕已关闭(即空闲模式) (1) 通过监听活动中的按键事件可以轻松解决此问题 (2) 可以通过收听android.media.VOLUME\u CHANGED\u ACTION部分解决(是的,我知道它不是公共API,但它可以在我测试过的所有设备上运行,我找不到替代方案)。但在我的Nexus5(Android

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

  • 应用程序位于前台
  • 应用程序在后台
  • 锁屏或键盘已接合
  • 屏幕已关闭(即空闲模式)
  • (1) 通过监听活动中的按键事件可以轻松解决此问题

    (2) 可以通过收听android.media.VOLUME\u CHANGED\u ACTION部分解决(是的,我知道它不是公共API,但它可以在我测试过的所有设备上运行,我找不到替代方案)。但在我的Nexus5(Android 6.0)上,第一次按下摇杆时,它会在短时间内显示音量对话框,需要第二次按下才能将摇杆事件传递给我的应用程序。我还没有确定这是从哪个版本的Android开始发生的,但我想知道如何确保所有Android版本的第一个事件都传递给我的应用程序

    (3) 可通过使用WindowManager
    FLAG\u discover\u KEYGUARD
    FLAG\u SHOW\u WHEN\u LOCKED
    来缓解此问题,以避免锁定屏幕和键盘

    (4) 当应用程序位于前台时,可以使用WindowManager
    标记保持屏幕打开来忽略显示超时,从而部分缓解此问题。但不幸的是,用户意外地手动关闭屏幕电源是一种常见事件,即使使用
    唤醒锁定
    也不允许通过
    android.media.volume\u CHANGED\u ACTION
    在屏幕空闲时接收音量摇杆事件

    因此,问题是:

  • 我如何确保第一次按下音量摇杆传递给我的应用程序,而不是被音量对话框捕获和使用
  • 当屏幕空闲时,如何接收音量调节器事件