2017-08-27 128 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