注册长按音量键听众

时间:2017-08-27 11:27:03

标签: android-8.0-oreo

我非常感兴趣地阅读了关于长按音量关键听众的文章here,而Android Oreo中的屏幕已关闭,但遗憾的是它不是很详细。有没有人有关于此功能的更多信息?

这是如何运作的?是否调用了Activity的onKeyLongPress方法(这意味着活动必须在前台)或者我们必须在哪里注册这个监听器(可能在服务中)?文章还指出,此功能仅适用于系统应用,但我想可以通过root授予权限吗?

1 个答案:

答案 0 :(得分:2)

根据我从commit diff以及编写here的CTS测试中可以理解的内容,系统应用应该从.union()调用setOnVolumeKeyLongPressListener API以便收听音量键长按事件。可以照常获取MediaSessionManager系统服务:

  

必须使用带有参数MediaSessionManager.class的Context.getSystemService(Class)或带有Context.MEDIA_SESSION_SERVICE参数的Context.getSystemService(String)来获取此类的实例。

与其他侦听器一样,实现MediaSessionManager接口的类中的实例应该在内存中以接收事件。前台和正在运行的服务中的活动符合该条件。

当不再需要监听器时,系统应用程序应调用相同的API,但将OnVolumeKeyLongPressListener作为监听器参数传递。如果参考不再有效,则不这样做可能会导致后台出现异常。此外,系统当时只能容纳一个监听器,如果两个系统应用程序设置两个不同的监听器,则只调用最后一个监听器。

null可以通过root授予,但请记住"android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER"上有setOnVolumeKeyLongPressListener注释,第三方应用程序必须通过Java Reflection访问它。

希望它有所帮助。