Android Элементы управления ExoPlayer не работают после настройки плеера - PullRequest
0 голосов
/ 22 января 2020

У меня есть приложение Android, которое воспроизводит звук с помощью ExoPlayer, работающего в сервисе. В Activity-A вы можете выбрать трек для воспроизведения. Служба запускается и начинает воспроизведение аудио. Элементы управления становятся видимыми, и все выглядит нормально:

enter image description here

Когда я перехожу к Activity-B, звук продолжает воспроизводиться в фоновом режиме, поскольку это служба. Когда я возвращаюсь к Activity-A, элементы управления появляются, но отображаются неправильно. Звук по-прежнему воспроизводится нормально, но индикатор выполнения не в порядке, и вместо паузы отображаются кнопки воспроизведения и паузы:

enter image description here

У меня есть для взаимодействия с элементами управления, например, нажмите кнопку воспроизведения, после чего они снова будут выглядеть нормально, индикатор выполнения будет отображаться правильно.

Этот метод привязывает игрока к элементам управления:

private void initializePlayer() {
    if (isBound && audioPlayerService != null) {
        player = audioPlayerService.getPlayerInstance();
        playerControlView.setPlayer(player);
    }
}

Почему органы управления не работают сразу?

1 Ответ

2 голосов
/ 22 января 2020

Исправлено с помощью следующего кода:

private void initializePlayer() {
    if (isBound && audioPlayerService != null) {
        player = audioPlayerService.getPlayerInstance();
        if (audioPlayerService.isPlaying()) {
            playerControlView.setVisibility(View.VISIBLE);
        }
        playerControlView.setPlayer(player);
    }

}

Объяснение:

После некоторых исследований я заметил, что после того, как вы прикрепите свой плеер к вашему виду с помощью PlayerControlView.setPlayer(), PlayerControlView.updateAll() метод вызывается, чтобы все выглядело правильно. Однако, есть проверка, чтобы видеть, видимы ли элементы управления, и обновления не сделаны (метод завершается), если элементы управления фактически не видны:

if (!isVisible() || !isAttachedToWindow) {
  return;
}

В моем коде я прикреплял Сначала включите управление, прежде чем сделать его видимым (что показалось мне логичным), так что в этом была проблема.

...