Ứng dụng đa phương tiện thường chứa bộ sưu tập các mục nội dung đa phương tiện, được sắp xếp theo hệ phân cấp. Ví dụ: các bài hát trong một đĩa nhạc hoặc các tập chương trình truyền hình trong một danh sách phát. Hệ thống phân cấp các mục nội dung nghe nhìn này được gọi là thư viện nội dung nghe nhìn.
MediaLibraryService
cung cấp một API đã chuẩn hoá để phân phát và truy cập vào thư viện nội dung đa phương tiện của bạn. Điều này có thể hữu ích, chẳng hạn như khi thêm tính năng hỗ trợ cho Android Auto vào ứng dụng đa phương tiện, giúp cung cấp giao diện người dùng riêng an toàn cho người lái xe cho thư viện nội dung nghe nhìn của bạn.
Tạo MediaLibraryService
Việc triển khai MediaLibraryService
cũng tương tự như cách triển khai MediaSessionService
, ngoại trừ việc trong phương thức onGetSession()
, bạn nên trả về MediaLibrarySession
thay vì 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(); } }
Ngoài ra, hãy nhớ khai báo Service
cũng như các quyền cần thiết trong tệp kê khai:
<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" />
Sử dụng một MediaLibrarySession
API MediaLibraryService
yêu cầu thư viện nội dung đa phương tiện phải được cấu trúc ở định dạng cây, với một nút gốc duy nhất và các nút con có thể phát được hoặc xem được.
MediaLibrarySession
mở rộng API MediaSession
để thêm các API duyệt nội dung. So với lệnh gọi lại MediaSession
, lệnh gọi lại MediaLibrarySession
bổ sung các phương thức như:
onGetLibraryRoot()
trong trường hợp ứng dụng yêu cầuMediaItem
gốc của cây nội dungonGetChildren()
trong trường hợp ứng dụng yêu cầu phần tử con củaMediaItem
trong cây nội dungonGetSearchResult()
khi ứng dụng yêu cầu kết quả tìm kiếm từ cây nội dung cho một truy vấn nhất định
Các phương thức gọi lại có liên quan sẽ bao gồm đối tượng LibraryParams
với các tín hiệu bổ sung về loại cây nội dung mà ứng dụng khách quan tâm.