我非常感興趣的是,在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