多くの場合、メディアアプリには、階層的に編成されたメディア アイテムのコレクションが含まれます。アルバム内の曲や、プレイリスト内のテレビ番組のエピソードなど。このメディア アイテムの階層は、メディア ライブラリと呼ばれます。
MediaLibraryService
は、メディア ライブラリの提供とアクセスを行うための標準化された API を提供します。これは、たとえば、メディアアプリに Android Auto のサポートを追加する場合に役立ちます。Android Auto は、メディア ライブラリ用に独自のドライバセーフ UI を提供します。
MediaLibraryService
をビルドする
MediaLibraryService
の実装は MediaSessionService
の実装と似ていますが、onGetSession()
メソッドでは MediaSession
ではなく MediaLibrarySession
を返す必要があります。
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 は、メディア ライブラリが 1 つのルートノードと子ノード(再生可能またはブラウズ可能)を持つツリー形式で構造化されていることを前提としています。
MediaLibrarySession
は MediaSession
API を拡張して、コンテンツ ブラウジング API を追加します。MediaSession
コールバックと比較すると、MediaLibrarySession
コールバックでは次のようなメソッドが追加されます。
onGetLibraryRoot()
: クライアントがコンテンツ ツリーのルートMediaItem
をリクエストした場合onGetChildren()
: クライアントがコンテンツ ツリー内のMediaItem
の子をリクエストした場合onGetSearchResult()
: クライアントが特定のクエリに対してコンテンツ ツリーの検索結果をリクエストした場合
関連するコールバック メソッドには、クライアント アプリが関心を持つコンテンツ ツリーのタイプに関する追加のシグナルを含む LibraryParams
オブジェクトが含まれます。