Android 5.0(L) 的MediaSession架構分析

Android5.0 提出了全新的MediaSession概念用於播放器與控制器之間進行交互,它取代之前的RemoteControlClient,並提供了更爲靈活的客戶端受控端模型,下面是它的架構圖:



 其架構主要分爲3大部分:

1. 受控端(播放器):

播放器需要創建MediaSession,創建的時候就類似於在系統註冊了它,並告訴系統它可以被其他控制端所控制。

2. framework(中介):

受控端創建MediaSession以後都會登記在framework中,framework同時會記錄所有的MediaSession,並向控制端提供查詢及狀態更新服務。

3.控制端(播放狀態顯示及控制):

控制端實現方式可以多種多樣,可以在另外一個app裏實現,也可以在系統ui裏實現,它主要通過framework的MediaSessionManager來查詢系統中的session並根據自己的需要來選擇要控制的session,並能要求系統在session發生變化的時候通知自己。


實現方式:

1. 受控端(播放器):

受控端主要需要實現媒體的播放,這個和之前的沒有區別,其次需要創建MediaSession,創建的時候需要設置唯一的session標識符,這樣控制端可以根據該標識符來確定控制的session。然後需要實現的是session的回調方法(SessionCallback),該回調方法中定義了媒體播放的常見操作,play、pause、next、previous等,在創建session時需要把該callback設置到session中,並實現收到回調的處理辦法,比如onPlay的時候就啓動本地的播放器進行播放,onPause的時候就暫停。同時需要把播放器的狀態通過session設置到控制端,MediaSession提供專門的方法setPlaybackState和setMetadata來更新本地播放器的狀態和信息到控制端。


2. 控制端:

控制端需要先通過系統服務取得MediaSessionManager,然後查詢系統中的Session,並根據自己的需求確定要控制的session實例,比如根據標識符或者包名來確認。取得session以後需要完成兩件事,一是取得該session的MediaControl,該control用於控制播放器執行具體的操作,比如調用MediaControl的play方法將最終由系統執行播放器的callback裏的onPlay;二是需要向該session註冊自己的callback,該callback在播放器狀態發生變化時會被調用以通知控制端播放器的狀態及數據(媒體名、進度等等)。


3. 一個簡單的受控端與控制端示例:

(待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章