Trình điều khiển nội dung nghe nhìn tương tác với một phiên nội dung nghe nhìn để truy vấn và điều khiển nội dung nghe nhìn
lượt phát của ứng dụng. Trong Media3, MediaController
API triển khai giao diện Player
. Ví dụ về ứng dụng khách sử dụng một nội dung nghe nhìn
bộ điều khiển bao gồm:
- Nút điều khiển nội dung nghe nhìn của hệ thống Android
- Ứng dụng đồng hành Android Wear OS
- Android Auto và Automotive OS
- Trợ lý thoại, chẳng hạn như Trợ lý Google
- Ứng dụng Kiểm thử trình điều khiển nội dung nghe nhìn
Trình điều khiển nội dung nghe nhìn cũng có thể hữu ích trong ứng dụng đa phương tiện, ví dụ:
trình phát và phiên nội dung nghe nhìn phát trực tiếp trong Service
tách biệt với Activity
hoặc
Fragment
với giao diện người dùng.
Tạo một MediaController
Để tạo MediaController
, hãy bắt đầu bằng cách tạo SessionToken
cho thuộc tính
MediaSession
tương ứng. Phương thức onStart()
của Activity
hoặc
Fragment
có thể là nơi phù hợp để làm việc này.
Kotlin
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
Java
SessionToken sessionToken = new SessionToken(context, new ComponentName(context, PlaybackService.class));
Việc sử dụng SessionToken
này để tạo MediaController
sẽ kết nối
cho phiên cụ thể. Việc này diễn ra không đồng bộ, vì vậy bạn nên
lắng nghe kết quả và sử dụng kết quả đó khi có sẵn.
Kotlin
val controllerFuture = MediaController.Builder(context, sessionToken).buildAsync() controllerFuture.addListener({ // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor())
Java
ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(context, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor());
Sử dụng MediaController
MediaController
triển khai giao diện Player
để bạn có thể sử dụng các lệnh
được xác định trong giao diện để điều khiển việc phát lại MediaSession
được kết nối.
Điều này có nghĩa là việc gọi play()
trên MediaController
sẽ gửi
đến MediaSession
được kết nối, sau đó sẽ uỷ quyền
vào Player
cơ bản.
Tương tự, bạn có thể thêm Player.Listener
vào bộ điều khiển để theo dõi
những thay đổi trong trạng thái Player
. Tham khảo
Hướng dẫn về sự kiện người chơi
để biết thêm chi tiết về cách sử dụng Player.Listener
. MediaController.Listener
giao diện xác định các lệnh gọi lại bổ sung cho các sự kiện và lệnh đến từ
MediaSession
đã kết nối, chẳng hạn như
onAvailableSessionCommandsChanged()
khi phiên nội dung nghe nhìn thay đổi các lệnh trong phiên có sẵn và
onDisconnected()
khi bộ điều khiển bị ngắt kết nối khỏi phiên.
Giống như các thành phần khác, hãy nhớ phát hành MediaController
khi
không còn cần thiết nữa, chẳng hạn như trong phương thức onStop()
của Activity
hoặc
Fragment
.
Kotlin
MediaController.releaseFuture(controllerFuture)
Java
MediaController.releaseFuture(controllerFuture);
Khi bạn huỷ bỏ bộ điều khiển, thì tất cả các lệnh đang chờ xử lý đã được gửi đến và chỉ hủy liên kết khỏi dịch vụ phiên sau khi các lệnh này đã được xử lý hoặc sau một khoảng thời gian chờ, tuỳ vào thời điểm nào xảy ra trước.
Tạo và sử dụng MediaBrowser
MediaBrowser
được tạo dựa trên những tính năng do
MediaController
để cho phép duyệt xem thư viện nội dung nghe nhìn do nội dung nghe nhìn cung cấp
MediaLibraryService
của ứng dụng.
Kotlin
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync() browserFuture.addListener({ // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor())
Java
ListenableFuture<MediaBrowser> browserFuture = new MediaBrowser.Builder(context, sessionToken).buildAsync(); browserFuture.addListener(() -> { // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor());
Để bắt đầu duyệt thư viện nội dung của ứng dụng đa phương tiện, trước tiên hãy truy xuất nút gốc
với getLibraryRoot()
:
Kotlin
// Get the library root to start browsing the library tree. val rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null) rootFuture.addListener({ // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor())
Java
// Get the library root to start browsing the library tree. ListenableFuture<LibraryResult<MediaItem>> rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null); rootFuture.addListener(() -> { // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor());
Sau đó, bạn có thể điều hướng qua thư viện đa phương tiện bằng cách truy xuất phần tử con của một
MediaItem
trong thư viện bằng getChildren()
. Ví dụ: để truy xuất
phần tử con của nút gốc MediaItem
:
Kotlin
// Get the library root to start browsing the library tree. val childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Int.MAX_VALUE, null) childrenFuture.addListener({ // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor())
Java
ListenableFuture<LibraryResult<ImmutableList<MediaItem>>> childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Integer.MAX_VALUE, null); childrenFuture.addListener(() -> { // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor());