В настоящее время я работаю над частью приложения, которая имеет видео и аудио функциональность, и недавно начала рефакторинг кодовой базы. Цель состоит в том, чтобы интегрировать MediaSession/ MediaController
и MediaBrowserService/ MediaBrowser
framework.
Мы используем ExoPlayer
и PlayerControlView
more speci c, PlayerView для видео и аудио компонентов, и для него требуется ссылка на экземпляр проигрывателя для PlayerControlView
:
/**
* Sets the {@link Player} to control.
*
* @param player The {@link Player} to control, or {@code null} to detach the current player. Only
* players which are accessed on the main thread are supported ({@code
* player.getApplicationLooper() == Looper.getMainLooper()}).
*/
public void setPlayer(@Nullable Player player) {...
Однако, согласно android публикации разработчиков и документации из MediaBrowserService
, экземпляр игрока должен содержаться в сервисе. Кроме того, единственный способ для клиентского сайта (MediaBrowser и MediaController) взаимодействовать с ним с помощью метода connect()
и MediaBrowserConnectionCallback , что позволяет передавать экземпляр проигрывателя в PlayerControlView (или другой объект). наоборот)
Я пытался использовать различные обратные вызовы, такие как MediaSessionCompat.Callback , но ни SimpleExoPlayer , ни PlayerControlView подлежат продаже.
В традиционном сервисе мы используем Binder
для доступа к методам, которые мы объявили в сервисе, и делаем что-то вроде:
boolean attachPlayerControlView(PlayerControlView playerControlView) {
if (player != null) {
playerControlView.setPlayer(player);
return true;
}
return false;
}
Однако, с MediaBrowserService/ MediaBrowser
это кажется невозможным фреймворк. Я проверил ответ на этот вопрос , который указывает, что использование [sendCommand] является способом вызова пользовательских методов. Но это также требует, чтобы параметры были Parcelable.
Подводя итог, мой вопрос, есть ли способ получить PlayerControlView
доступ к экземпляру SimpleExoPlayer
или наоборот под MediaBrowserService
framework.
Большое спасибо за любой ответ или комментарий.