У меня есть приложение Android cordova, в котором включен Exoplayer Media Session, плеер не возобновляет работу после поиска на AndroidTV с помощью Google Assistant.
Поэтому я попытался сохранить playWhenReady
на dispatchSetPlayWhenReady
(который вызывается при открытии Google Assistant) в локальном свойстве wasPlaying
, чтобы проверить, должно ли оно возобновиться после поиска (если оно воспроизводилось раньше).
private class MyControlDispatcher implements ControlDispatcher {
private boolean wasPlaying = false;
@Override
public boolean dispatchSetPlayWhenReady(Player player, boolean playWhenReady) {
this.wasPlaying = player.getPlayWhenReady();
player.setPlayWhenReady(playWhenReady);
return true;
}
@Override
public boolean dispatchSeekTo(Player player, int windowIndex, long positionMs) {
if (this.wasPlaying) {
player.setPlayWhenReady(true);
}
player.seekTo(windowIndex, positionMs);
return true;
}
...
}
MyControlDispatcher myControlDispatcher = new MyControlDispatcher();
MediaSessionConnector mediaSessionConnector = new MediaSessionConnector(mediaSession);
mediaSessionConnector.setControlDispatcher(myControlDispatcher);
Это решило Первоначальная проблема, но затем у меня есть проблема, когда пользователь делает паузу, а затем ищет, оба с помощью Google Assistant. Он сохранит wasPlaying
как true
, когда пользователь вызовет команду PAUSE
(на dispatchSetPlayWhenReady
, когда помощник открыт), и возобновит поиск после того, как это не следует.
Так что в принципе мне нужно как-то получить обратный вызов команды PAUSE
от помощника Google, чтобы я мог отличить его от dispatchSetPlayWhenReady
, который вызывается при открытии помощника. И убедитесь, что wasPlaying
установлен на false
, когда пользователь вызывает команду PAUSE
, и предотвратите его возобновление после поиска.