미디어 앱에는 계층 구조로 구성된 미디어 항목 컬렉션이 포함되는 경우가 많습니다. 예로는 앨범의 노래 또는 재생목록의 TV 에피소드가 있습니다. 이러한 계층 구조는 미디어 항목을 미디어 라이브러리라고 합니다.
<ph type="x-smartling-placeholder">MediaLibraryService
는 표준화된 API를 제공하여
찾을 수 있습니다. 이는 예를 들어 서버에 대한 지원을 추가할 때
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() } }
자바
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
가 포함됩니다.
클라이언트 앱이 보내는 콘텐츠 트리 유형에 대한 추가 신호가 있는 객체
파악할 수 있습니다