미디어 앱에는 계층 구조로 구성된 미디어 항목 모음이 포함되는 경우가 많습니다. 예를 들어 앨범의 노래 또는 재생목록의 TV 에피소드가 여기에 해당합니다. 이러한 미디어 항목의 계층 구조를 미디어 라이브러리라고 합니다.
MediaLibraryService
는 미디어 라이브러리를 제공하고 액세스하는 표준화된 API를 제공합니다. 이는 미디어 라이브러리에 자체 운전자 안전 UI를 제공하는 미디어 앱에 Android Auto 지원을 추가할 때 유용할 수 있습니다.
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() } }
자바
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
콜백에는 다음과 같은 메서드가 추가됩니다.
- 클라이언트가 콘텐츠 트리의 루트
MediaItem
를 요청하는 경우onGetLibraryRoot()
onGetChildren()
클라이언트가 콘텐츠 트리에서MediaItem
의 하위 요소를 요청하는 경우onGetSearchResult()
클라이언트가 지정된 검색어에 대해 콘텐츠 트리에서 검색 결과를 요청하는 경우
관련 콜백 메서드에는 클라이언트 앱이 관심을 갖는 콘텐츠 트리의 유형에 관한 추가 신호가 포함된 LibraryParams
객체가 포함됩니다.