MediaBrowserService с ExoPlayer и PlayerControlView - Как получить доступ к экземпляру проигрывателя из пользовательского интерфейса (PlayerControlView)? - PullRequest
3 голосов
/ 03 апреля 2020

В настоящее время я работаю над частью приложения, которая имеет видео и аудио функциональность, и недавно начала рефакторинг кодовой базы. Цель состоит в том, чтобы интегрировать 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.

Большое спасибо за любой ответ или комментарий.

...