미디어 앱에는 계층 구조로 구성된 미디어 항목 컬렉션이 포함되는 경우가 많습니다. 예를 들어 앨범의 노래 또는 재생목록의 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() } }
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
객체가 포함됩니다.