我非常感兴趣的是,在Android Oreo屏幕关闭的情况下,我阅读关于长按音量键监听器的文章here,但不幸的是它不是很详细。有没有人有关于此功能的更多信息?注册长按音量键监听器
这究竟是如何工作的?是否调用了Activity的onKeyLongPress
方法(这是否意味着该活动必须位于前台)或我们必须在何处注册此侦听器(可能位于服务中)?文章还指出,这个功能只适用于系统应用程序,但我想可以通过root授予权限?
我非常感兴趣的是,在Android Oreo屏幕关闭的情况下,我阅读关于长按音量键监听器的文章here,但不幸的是它不是很详细。有没有人有关于此功能的更多信息?注册长按音量键监听器
这究竟是如何工作的?是否调用了Activity的onKeyLongPress
方法(这是否意味着该活动必须位于前台)或我们必须在何处注册此侦听器(可能位于服务中)?文章还指出,这个功能只适用于系统应用程序,但我想可以通过root授予权限?
从我能从commit diff理解和CTS测试书面here,该系统应用程序应该调用从MediaSessionManager
setOnVolumeKeyLongPressListener
API,以听音量键长按事件。所述MediaSessionManager
系统服务可以照常得到:必须用Context.getSystemService(类)与参数Context.MEDIA_SESSION_SERVICE参数MediaSessionManager.class或Context.getSystemService(字符串)来获得
这个类的实例。
与其他听众一样,来自类的实例OnVolumeKeyLongPressListener
接口应该在内存中以接收事件。前台和运行服务中的活动符合该标准。
当不再需要侦听器时,系统应用程序应调用相同的API,但将null
作为侦听器参数。如果引用无效,未能这样做可能会在后台导致异常。此外,如果两个系统应用程序只设置了两个不同的侦听器,则系统只能保存一个侦听器,最后一个侦听器将被调用。
"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER"
可以通过root授予,但请记住setOnVolumeKeyLongPressListener
上面有@hide
注释,第三方应用程序必须通过Java Reflection访问它。
希望它有帮助。
真的很好的答案谢谢你!现在还没有尝试注册,但我会在这里留言。 – Cilenco
没问题!我喜欢对AOSP代码进行分析。我会等待您的反馈。我自己无法尝试,因为我现在没有任何Android O设备。 – Perazzo
我发表了一个实例[这里](https://github.com/Cilenco/skipTrackLongPressVolume)。如果有人对ToDo下的笔记有想法,请随时与我联系。 – Cilenco