Kết nối với một ứng dụng đa phương tiện

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:

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());