媒體應用程式通常包含媒體項目組合,並以階層方式整理。 例如播放清單中專輯或電視劇集中的歌曲。這個 Pod 的階層 即是媒體庫。
MediaLibraryService
會提供標準化 API 來提供並存取
媒體庫。這項功能很實用,例如新增
到媒體應用程式使用 Android Auto,為此應用程式提供專屬的
適用於媒體庫的驅動程式安全使用者介面。
打造 MediaLibraryService
實作 MediaLibraryService
的方式與
實作 MediaSessionService
除非在 onGetSession()
方法中
會傳回 MediaLibrarySession
,而不是 MediaSession
。
Kotlin
class PlaybackService : MediaLibraryService() { var mediaLibrarySession: MediaLibrarySession? = null var callback: MediaLibrarySession.Callback = object : MediaLibrarySession.Callback {...} // If desired, validate the controller before returning the media library session override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? = mediaLibrarySession // Create your player and media library session in the onCreate lifecycle event override fun onCreate() { super.onCreate() val player = ExoPlayer.Builder(this).build() mediaLibrarySession = MediaLibrarySession.Builder(this, player, callback).build() } // Remember to release the player and media library session in onDestroy override fun onDestroy() { mediaLibrarySession?.run { player.release() release() mediaLibrarySession = null } super.onDestroy() } }
Java
class PlaybackService extends MediaLibraryService { MediaLibrarySession mediaLibrarySession = null; MediaLibrarySession.Callback callback = new MediaLibrarySession.Callback() {...}; @Override public MediaLibrarySession onGetSession(MediaSession.ControllerInfo controllerInfo) { // If desired, validate the controller before returning the media library session return mediaLibrarySession; } // Create your player and media library session in the onCreate lifecycle event @Override public void onCreate() { super.onCreate(); ExoPlayer player = new ExoPlayer.Builder(this).build(); mediaLibrarySession = new MediaLibrarySession.Builder(this, player, callback).build(); } // Remember to release the player and media library session in onDestroy @Override public void onDestroy() { if (mediaLibrarySession != null) { mediaLibrarySession.getPlayer().release(); mediaLibrarySession.release(); mediaLibrarySession = null; } super.onDestroy(); } }
請務必在資訊清單檔案中宣告 Service
和必要權限
其他情況:
<service
android:name=".PlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- For targetSdk 34+ -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
使用 MediaLibrarySession
MediaLibraryService
API 會預期您的媒體庫是以
這種樹狀結構格式,包括單一根節點和子節點
可試玩
或進一步瀏覽。
MediaLibrarySession
擴充 MediaSession
API,可新增內容瀏覽 API。相較於
MediaSession
回呼、
MediaLibrarySession
回呼
新增以下方法:
onGetLibraryRoot()
敬上 用戶端要求內容樹狀結構的根層級MediaItem
時onGetChildren()
敬上 在用戶端要求內容樹狀結構中MediaItem
的子項時觸發onGetSearchResult()
敬上 用戶端針對某個 項查詢
相關的回呼方法會包含 LibraryParams
包含用戶端應用程式的內容樹狀結構類型相關信號