Amazon Fire TV Remote не приостанавливает работу ExoPlayer, когда элементы управления скрыты - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над библиотекой Android, которая представляет собой простой видеоплеер, упаковывающий ExoPlayer.При использовании Amazon Fire TV я могу перемещаться по своему приложению с помощью пульта дистанционного управления (указатель направления переключается между элементами в моем представлении) и управлять плеером (кнопка воспроизведения / паузы переключает состояние воспроизведения, а кнопки поиска работают, как и предполагалось).... до тех пор, пока отображается панель управления

Примерно через 3 секунды панель управления автоматически скрывается, и пульт ДУ перестает отвечать на запросы

Есть ли подходящее исправление дляэто или мне нужно вручную определять нажатия клавиш на пульте и показывать панель управления?Я чувствую, что это то, что должен был разрешить порт Amazon ExoPlayer

Обновление

Я расширил класс PlayerView и переопределил метод dispatchKeyEvent, чтобы увидеть то, что было замечено:

public class Test extends PlayerView {
    @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        Log.debug("***** KEY EVENT: " + String.valueOf(event.getKeyCode()) + " *********");
        return true;
    }
}

Сделав это и нажав кнопку воспроизведения на пульте дистанционного управления, я заметил:

  • Когда была видна панель управления, KeyEvent со значением keyCode 85 было отправлено
  • Когда панель управления была скрыта, этот метод никогда не срабатывал

Я просмотрел методы, доступные для PlayerView, чтобы посмотреть, есть либыли полезны, но ничего не стоило:

  • setControllerAutoShow - определяет, отображается ли панель управления при первом запуске видео
  • setControllerHideDuringAds - определяет, видна ли панель управления во времяобъявление воспроизводится
  • setControllerHideOnTouch - не имеет отношения к FireTV (нет событий касания), но скрывает панель управления, если вы нажимаете видео
  • setControllerHideTimeoutMs - может задержать скрытие панели управления,но иначе не позволяет мне вернуть его после этогоскрыт
  • showController - может принудительно раскрыть контроллер в коде, что позволяет мне приостанавливать видео, но я, не имея возможности видеть события нажатия клавиш, не могу правильно вызвать это при нажатии кнопкипульт дистанционного управления

В конечном счете, я просто хочу, чтобы он вел себя как приложения Netflix или Hulu - панель управления исчезает через несколько секунд бездействия, но если вы нажмете кнопку паузы, панель управления вернется.

1 Ответ

0 голосов
/ 30 мая 2019

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

    @Override
    public boolean dispatchKeyEvent(KeyEvent event)
    {
        playerView.dispatchKeyEvent(event);
        return true;
    }

Теперь, независимо от того, видна панель управления или нет, игрок все равно реагирует на все ключевые события. Однако:

  • Для этого необходимо отредактировать действие, что означает, что любой, кто использует мою библиотеку плеера, должен знать об этом дополнительном шаге для правильной интеграции плеера
  • Это не объясняет, почему игрок теряет фокус, оно просто обходит проблему
...