我非常感兴趣地阅读了关于长按音量关键听众的文章here,而Android Oreo中的屏幕已关闭,但遗憾的是它不是很详细。有没有人有关于此功能的更多信息?
这是如何运作的?是否调用了Activity的onKeyLongPress
方法(这意味着活动必须在前台)或者我们必须在哪里注册这个监听器(可能在服务中)?文章还指出,此功能仅适用于系统应用,但我想可以通过root授予权限吗?
答案 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访问它。
希望它有所帮助。