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