Медиа-контроллер взаимодействует с медиа-сеансом для запроса и управления воспроизведением мультимедийного приложения. В Media3 API MediaController
реализует интерфейс Player
. Примеры клиентских приложений, использующих медиаконтроллер, включают:
- Управление мультимедиа в системе Android
- Приложение-компаньон для ОС Android Wear
- Android Auto и автомобильная ОС
- Голосовые помощники, такие как Google Assistant
- Приложение Media Controller Test
Медиа-контроллер также может быть полезен в медиа-приложении, например, если проигрыватель и медиа-сеанс находятся в Service
отдельном от Activity
или Fragment
с пользовательским интерфейсом.
Создайте MediaController
Чтобы создать MediaController
, начните с создания SessionToken
для соответствующего MediaSession
. Метод onStart()
вашего Activity
или Fragment
может быть хорошим местом для этого.
Котлин
val sessionToken =
SessionToken(context, ComponentName(context, PlaybackService::class.java))
Ява
SessionToken sessionToken =
new SessionToken(context, new ComponentName(context, PlaybackService.class));
Использование этого SessionToken
для последующего создания MediaController
подключает контроллер к данному сеансу. Это происходит асинхронно, поэтому вам следует прослушивать результат и использовать его, когда он доступен.
Котлин
val controllerFuture =
MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaController> controllerFuture =
new MediaController.Builder(context, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());
Используйте MediaController
MediaController
реализует интерфейс Player
, поэтому вы можете использовать команды, определенные в интерфейсе, для управления воспроизведением подключенного MediaSession
. Это означает, что вызов play()
в MediaController
отправит команду подключенному MediaSession
, который впоследствии делегирует команду своему базовому Player
.
Вы можете добавить Player.Listener
к контроллеру, чтобы прослушивать изменения в состоянии Player
. Дополнительные сведения об использовании Player.Listener
см. в руководстве по событиям Player .
Интерфейс MediaController.Listener
определяет дополнительные обратные вызовы для событий и пользовательских команд из подключенного MediaSession
. Примерами являются onCustomCommand()
, когда сеанс отправляет пользовательскую команду, onAvailableSessionCommandsChanged()
когда сеанс изменяет доступные команды сеанса, или onDisconnected()
, когда контроллер отключается от сеанса.
MediaController.Listener
можно установить при создании контроллера с помощью Builder
:
Котлин
MediaController.Builder(context, sessionToken)
.setListener(
object : MediaController.Listener {
override fun onCustomCommand(
controller: MediaController,
command: SessionCommand,
args: Bundle,
): ListenableFuture<SessionResult> {
// Handle custom command.
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
override fun onDisconnected(controller: MediaController) {
// Handle disconnection.
}
}
)
.buildAsync()
Ява
new MediaController.Builder(context, sessionToken)
.setListener(
new MediaController.Listener() {
@Override
public ListenableFuture<SessionResult> onCustomCommand(
MediaController controller, SessionCommand command, Bundle args) {
// Handle custom command.
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS));
}
@Override
public void onDisconnected(MediaController controller) {
// Handle disconnection.
}
})
.buildAsync();
Как и в случае с другими компонентами, не забудьте освободить MediaController
, когда он больше не нужен, например, в методе onStop()
Activity
или Fragment
.
Котлин
MediaController.releaseFuture(controllerFuture)
Ява
MediaController.releaseFuture(controllerFuture);
При освобождении контроллера все ожидающие команды, отправленные в сеанс, по-прежнему будут доставлены, а привязка к службе сеанса будет отменена только после обработки этих команд или по истечении периода ожидания, в зависимости от того, что наступит раньше.
Создайте и используйте MediaBrowser
MediaBrowser
опирается на возможности, предлагаемые MediaController
, и позволяет также просматривать медиатеку, предлагаемую MediaLibraryService
мультимедийного приложения.
Котлин
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaBrowser> browserFuture =
new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());
Чтобы начать просмотр библиотеки контента медиа-приложения, сначала получите корневой узел с помощью getLibraryRoot()
:
Котлин
// 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())
Ява
// 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());
Затем вы можете перемещаться по медиатеке, получая дочерние элементы MediaItem
в библиотеке с помощью getChildren()
. Например, чтобы получить дочерние элементы корневого узла MediaItem
:
Котлин
// 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())
Ява
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());
Отображение элементов управления воспроизведением для другого мультимедийного приложения
При отображении элементов управления пользовательского интерфейса с кнопками для другого мультимедийного приложения важно следовать заявленным настройкам мультимедийных кнопок этого приложения.
Лучший способ разрешить предпочтения приложения, а также ограничения и требования вашего пользовательского интерфейса — использовать CommandButton.DisplayConstraints
. Вы можете определить пределы и ограничения возможностей вашего пользовательского интерфейса, а метод resolve
предоставляет определенный список кнопок для отображения с их значком, положением и предполагаемым действием.
Медиа-контроллер взаимодействует с медиа-сеансом для запроса и управления воспроизведением мультимедийного приложения. В Media3 API MediaController
реализует интерфейс Player
. Примеры клиентских приложений, использующих медиаконтроллер, включают:
- Управление мультимедиа в системе Android
- Приложение-компаньон для ОС Android Wear
- Android Auto и автомобильная ОС
- Голосовые помощники, такие как Google Assistant
- Приложение Media Controller Test
Медиа-контроллер также может быть полезен в медиа-приложении, например, если проигрыватель и медиа-сеанс находятся в Service
отдельном от Activity
или Fragment
с пользовательским интерфейсом.
Создайте MediaController
Чтобы создать MediaController
, начните с создания SessionToken
для соответствующего MediaSession
. Метод onStart()
вашего Activity
или Fragment
может быть хорошим местом для этого.
Котлин
val sessionToken =
SessionToken(context, ComponentName(context, PlaybackService::class.java))
Ява
SessionToken sessionToken =
new SessionToken(context, new ComponentName(context, PlaybackService.class));
Использование этого SessionToken
для последующего создания MediaController
подключает контроллер к данному сеансу. Это происходит асинхронно, поэтому вам следует прослушивать результат и использовать его, когда он доступен.
Котлин
val controllerFuture =
MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaController> controllerFuture =
new MediaController.Builder(context, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());
Используйте MediaController
MediaController
реализует интерфейс Player
, поэтому вы можете использовать команды, определенные в интерфейсе, для управления воспроизведением подключенного MediaSession
. Это означает, что вызов play()
в MediaController
отправит команду подключенному MediaSession
, который впоследствии делегирует команду своему базовому Player
.
Вы можете добавить Player.Listener
к контроллеру, чтобы прослушивать изменения в состоянии Player
. Дополнительные сведения об использовании Player.Listener
см. в руководстве по событиям Player .
Интерфейс MediaController.Listener
определяет дополнительные обратные вызовы для событий и пользовательских команд из подключенного MediaSession
. Примерами являются onCustomCommand()
, когда сеанс отправляет пользовательскую команду, onAvailableSessionCommandsChanged()
когда сеанс изменяет доступные команды сеанса, или onDisconnected()
, когда контроллер отключается от сеанса.
MediaController.Listener
можно установить при создании контроллера с помощью Builder
:
Котлин
MediaController.Builder(context, sessionToken)
.setListener(
object : MediaController.Listener {
override fun onCustomCommand(
controller: MediaController,
command: SessionCommand,
args: Bundle,
): ListenableFuture<SessionResult> {
// Handle custom command.
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
override fun onDisconnected(controller: MediaController) {
// Handle disconnection.
}
}
)
.buildAsync()
Ява
new MediaController.Builder(context, sessionToken)
.setListener(
new MediaController.Listener() {
@Override
public ListenableFuture<SessionResult> onCustomCommand(
MediaController controller, SessionCommand command, Bundle args) {
// Handle custom command.
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS));
}
@Override
public void onDisconnected(MediaController controller) {
// Handle disconnection.
}
})
.buildAsync();
Как и в случае с другими компонентами, не забудьте освободить MediaController
, когда он больше не нужен, например, в методе onStop()
Activity
или Fragment
.
Котлин
MediaController.releaseFuture(controllerFuture)
Ява
MediaController.releaseFuture(controllerFuture);
При освобождении контроллера все ожидающие команды, отправленные в сеанс, по-прежнему будут доставлены, а привязка к службе сеанса будет отменена только после обработки этих команд или по истечении периода ожидания, в зависимости от того, что наступит раньше.
Создайте и используйте MediaBrowser
MediaBrowser
опирается на возможности, предлагаемые MediaController
, и позволяет также просматривать медиатеку, предлагаемую MediaLibraryService
мультимедийного приложения.
Котлин
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaBrowser> browserFuture =
new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());
Чтобы начать просмотр библиотеки контента медиа-приложения, сначала получите корневой узел с помощью getLibraryRoot()
:
Котлин
// 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())
Ява
// 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());
Затем вы можете перемещаться по медиатеке, получая дочерние элементы MediaItem
в библиотеке с помощью getChildren()
. Например, чтобы получить дочерние элементы корневого узла MediaItem
:
Котлин
// 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())
Ява
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());
Отображение элементов управления воспроизведением для другого мультимедийного приложения
При отображении элементов управления пользовательского интерфейса с кнопками для другого мультимедийного приложения важно следовать заявленным настройкам мультимедийных кнопок этого приложения.
Лучший способ разрешить предпочтения приложения, а также ограничения и требования вашего пользовательского интерфейса — использовать CommandButton.DisplayConstraints
. Вы можете определить пределы и ограничения возможностей вашего пользовательского интерфейса, а метод resolve
предоставляет определенный список кнопок для отображения с их значком, положением и предполагаемым действием.
Медиа-контроллер взаимодействует с медиа-сеансом для запроса и управления воспроизведением мультимедийного приложения. В Media3 API MediaController
реализует интерфейс Player
. Примеры клиентских приложений, использующих медиаконтроллер, включают:
- Управление мультимедиа в системе Android
- Приложение-компаньон для ОС Android Wear
- Android Auto и автомобильная ОС
- Голосовые помощники, такие как Google Assistant
- Приложение Media Controller Test
Медиа-контроллер также может быть полезен в медиа-приложении, например, если проигрыватель и медиа-сеанс находятся в Service
отдельном от Activity
или Fragment
с пользовательским интерфейсом.
Создайте MediaController
Чтобы создать MediaController
, начните с создания SessionToken
для соответствующего MediaSession
. Метод onStart()
вашего Activity
или Fragment
может быть хорошим местом для этого.
Котлин
val sessionToken =
SessionToken(context, ComponentName(context, PlaybackService::class.java))
Ява
SessionToken sessionToken =
new SessionToken(context, new ComponentName(context, PlaybackService.class));
Использование этого SessionToken
для последующего создания MediaController
подключает контроллер к данному сеансу. Это происходит асинхронно, поэтому вам следует прослушивать результат и использовать его, когда он доступен.
Котлин
val controllerFuture =
MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaController> controllerFuture =
new MediaController.Builder(context, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());
Используйте MediaController
MediaController
реализует интерфейс Player
, поэтому вы можете использовать команды, определенные в интерфейсе, для управления воспроизведением подключенного MediaSession
. Это означает, что вызов play()
в MediaController
отправит команду подключенному MediaSession
, который впоследствии делегирует команду своему базовому Player
.
Вы можете добавить Player.Listener
к контроллеру, чтобы прослушивать изменения в состоянии Player
. Дополнительные сведения об использовании Player.Listener
см. в руководстве по событиям Player .
Интерфейс MediaController.Listener
определяет дополнительные обратные вызовы для событий и пользовательских команд из подключенного MediaSession
. Примерами являются onCustomCommand()
, когда сеанс отправляет пользовательскую команду, onAvailableSessionCommandsChanged()
когда сеанс изменяет доступные команды сеанса, или onDisconnected()
, когда контроллер отключается от сеанса.
MediaController.Listener
можно установить при создании контроллера с помощью Builder
:
Котлин
MediaController.Builder(context, sessionToken)
.setListener(
object : MediaController.Listener {
override fun onCustomCommand(
controller: MediaController,
command: SessionCommand,
args: Bundle,
): ListenableFuture<SessionResult> {
// Handle custom command.
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
override fun onDisconnected(controller: MediaController) {
// Handle disconnection.
}
}
)
.buildAsync()
Ява
new MediaController.Builder(context, sessionToken)
.setListener(
new MediaController.Listener() {
@Override
public ListenableFuture<SessionResult> onCustomCommand(
MediaController controller, SessionCommand command, Bundle args) {
// Handle custom command.
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS));
}
@Override
public void onDisconnected(MediaController controller) {
// Handle disconnection.
}
})
.buildAsync();
Как и в случае с другими компонентами, не забудьте освободить MediaController
, когда он больше не нужен, например, в методе onStop()
Activity
или Fragment
.
Котлин
MediaController.releaseFuture(controllerFuture)
Ява
MediaController.releaseFuture(controllerFuture);
При освобождении контроллера все ожидающие команды, отправленные в сеанс, по-прежнему будут доставлены, а привязка к службе сеанса будет отменена только после обработки этих команд или по истечении периода ожидания, в зависимости от того, что наступит раньше.
Создайте и используйте MediaBrowser
MediaBrowser
опирается на возможности, предлагаемые MediaController
, и позволяет также просматривать медиатеку, предлагаемую MediaLibraryService
мультимедийного приложения.
Котлин
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaBrowser> browserFuture =
new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());
Чтобы начать просмотр библиотеки контента медиа-приложения, сначала получите корневой узел с помощью getLibraryRoot()
:
Котлин
// 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())
Ява
// 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());
Затем вы можете перемещаться по медиатеке, получая дочерние элементы MediaItem
в библиотеке с помощью getChildren()
. Например, чтобы получить дочерние элементы корневого узла MediaItem
:
Котлин
// 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())
Ява
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());
Отображение элементов управления воспроизведением для другого мультимедийного приложения
При отображении элементов управления пользовательского интерфейса с кнопками для другого мультимедийного приложения важно следовать заявленным настройкам мультимедийных кнопок этого приложения.
Лучший способ разрешить предпочтения приложения, а также ограничения и требования вашего пользовательского интерфейса — использовать CommandButton.DisplayConstraints
. Вы можете определить пределы и ограничения возможностей вашего пользовательского интерфейса, а метод resolve
предоставляет определенный список кнопок для отображения с их значком, положением и предполагаемым действием.
Медиа-контроллер взаимодействует с медиа-сеансом для запроса и управления воспроизведением мультимедийного приложения. В Media3 API MediaController
реализует интерфейс Player
. Примеры клиентских приложений, использующих медиаконтроллер, включают:
- Управление мультимедиа в системе Android
- Приложение-компаньон для ОС Android Wear
- Android Auto и автомобильная ОС
- Голосовые помощники, такие как Google Assistant
- Приложение Media Controller Test
Медиа-контроллер также может быть полезен в медиа-приложении, например, если проигрыватель и медиа-сеанс находятся в Service
отдельном от Activity
или Fragment
с пользовательским интерфейсом.
Создайте MediaController
Чтобы создать MediaController
, начните с создания SessionToken
для соответствующего MediaSession
. Метод onStart()
вашего Activity
или Fragment
может быть хорошим местом для этого.
Котлин
val sessionToken =
SessionToken(context, ComponentName(context, PlaybackService::class.java))
Ява
SessionToken sessionToken =
new SessionToken(context, new ComponentName(context, PlaybackService.class));
Использование этого SessionToken
для последующего создания MediaController
подключает контроллер к данному сеансу. Это происходит асинхронно, поэтому вам следует прослушивать результат и использовать его, когда он доступен.
Котлин
val controllerFuture =
MediaController.Builder(context, sessionToken).buildAsync()
controllerFuture.addListener({
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaController> controllerFuture =
new MediaController.Builder(context, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
// MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());
Используйте MediaController
MediaController
реализует интерфейс Player
, поэтому вы можете использовать команды, определенные в интерфейсе, для управления воспроизведением подключенного MediaSession
. Это означает, что вызов play()
в MediaController
отправит команду подключенному MediaSession
, который впоследствии делегирует команду своему базовому Player
.
Вы можете добавить Player.Listener
к контроллеру, чтобы прослушивать изменения в состоянии Player
. Дополнительные сведения об использовании Player.Listener
см. в руководстве по событиям Player .
Интерфейс MediaController.Listener
определяет дополнительные обратные вызовы для событий и пользовательских команд из подключенного MediaSession
. Примерами являются onCustomCommand()
, когда сеанс отправляет пользовательскую команду, onAvailableSessionCommandsChanged()
когда сеанс изменяет доступные команды сеанса, или onDisconnected()
, когда контроллер отключается от сеанса.
MediaController.Listener
можно установить при создании контроллера с помощью Builder
:
Котлин
MediaController.Builder(context, sessionToken)
.setListener(
object : MediaController.Listener {
override fun onCustomCommand(
controller: MediaController,
command: SessionCommand,
args: Bundle,
): ListenableFuture<SessionResult> {
// Handle custom command.
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
override fun onDisconnected(controller: MediaController) {
// Handle disconnection.
}
}
)
.buildAsync()
Ява
new MediaController.Builder(context, sessionToken)
.setListener(
new MediaController.Listener() {
@Override
public ListenableFuture<SessionResult> onCustomCommand(
MediaController controller, SessionCommand command, Bundle args) {
// Handle custom command.
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS));
}
@Override
public void onDisconnected(MediaController controller) {
// Handle disconnection.
}
})
.buildAsync();
Как и в случае с другими компонентами, не забудьте освободить MediaController
, когда он больше не нужен, например, в методе onStop()
Activity
или Fragment
.
Котлин
MediaController.releaseFuture(controllerFuture)
Ява
MediaController.releaseFuture(controllerFuture);
Освобождение контроллера по-прежнему будет доставлять все ожидающие команды, отправленные в сеанс, и отменять привязку от службы сеанса только после обработки этих команд или по истечении периода ожидания, в зависимости от того, что наступит раньше.
Создайте и используйте MediaBrowser
MediaBrowser
опирается на возможности, предлагаемые MediaController
, и позволяет также просматривать медиатеку, предлагаемую MediaLibraryService
мультимедийного приложения.
Котлин
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync()
browserFuture.addListener({
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor())
Ява
ListenableFuture<MediaBrowser> browserFuture =
new MediaBrowser.Builder(context, sessionToken).buildAsync();
browserFuture.addListener(() -> {
// MediaBrowser is available here with browserFuture.get()
}, MoreExecutors.directExecutor());
Чтобы начать просмотр библиотеки контента медиа-приложения, сначала получите корневой узел с помощью getLibraryRoot()
:
Котлин
// 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())
Ява
// 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());
Затем вы можете перемещаться по медиатеке, получая дочерние элементы MediaItem
в библиотеке с помощью getChildren()
. Например, чтобы получить дочерние элементы корневого узла MediaItem
:
Котлин
// 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())
Ява
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());
Отображение элементов управления воспроизведением для другого мультимедийного приложения
При отображении элементов управления пользовательского интерфейса с кнопками для другого мультимедийного приложения важно следовать заявленным настройкам мультимедийных кнопок этого приложения.
Лучший способ разрешить предпочтения приложения, а также ограничения и требования вашего пользовательского интерфейса — использовать CommandButton.DisplayConstraints
. Вы можете определить пределы и ограничения возможностей вашего пользовательского интерфейса, а метод resolve
предоставляет определенный список кнопок для отображения с их значком, положением и предполагаемым действием.