2017-08-27 141 views
1

我非常感兴趣的是,在Android Oreo屏幕关闭的情况下,我阅读关于长按音量键监听器的文章here,但不幸的是它不是很详细。有没有人有关于此功能的更多信息?注册长按音量键监听器

这究竟是如何工作的?是否调用了Activity的onKeyLongPress方法(这是否意味着该活动必须位于前台)或我们必须在何处注册此侦听器(可能位于服务中)?文章还指出,这个功能只适用于系统应用程序,但我想可以通过root授予权限?

回答

2

从我能从commit diff理解和CTS测试书面here,该系统应用程序应该调用从MediaSessionManagersetOnVolumeKeyLongPressListener 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访问它。

希望它有帮助。

+0

真的很好的答案谢谢你!现在还没有尝试注册,但我会在这里留言。 – Cilenco

+0

没问题!我喜欢对AOSP代码进行分析。我会等待您的反馈。我自己无法尝试,因为我现在没有任何Android O设备。 – Perazzo

+1

我发表了一个实例[这里](https://github.com/Cilenco/skipTrackLongPressVolume)。如果有人对ToDo下的笔记有想法,请随时与我联系。 – Cilenco