Обнаружение паузы/возобновления в ExoPlayer
Я два дня искал этот вопрос в github, но не могу найти верный ответ. Я хочу пример для обнаружения pause / resume
в ExoPlayer > 2.x
.
Кто-нибудь может дать мне пример? Я проверил onPlayerStateChanged
и проблема не решена.
onPlayerStateChanged : STATE_BUFFERING
onPlayerStateChanged : STATE_READY
Я только что получил этот журнал от onPlayerStateChanged
, и он не вызывается во все времена!
Ответы
Ответ 1
Вам нужно проверить playWhenReady
с Player.EventListener. Состояние воспроизведения ExoPlayer не зависит от паузы игрока или нет:
player.addListener(new Player.DefaultEventListener() {
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playWhenReady && playbackState == Player.STATE_READY) {
// media actually playing
} else if (playWhenReady) {
// might be idle (plays after prepare()),
// buffering (plays when data available)
// or ended (plays when seek away from end)
} else {
// player paused in any state
}
}
});
Для воспроизведения/приостановки воспроизведения проигрывателя ExoPlayer
player.setPlayWhenReady(boolean)
Последовательность состояний воспроизведения с ExoPlayer с медиа файлом, который никогда не подходит для повторителя, находится в каждом из четырех состояний и не выражает воспроизведение/приостановку:
Player.STATE_IDLE;
Player.STATE_BUFFERING;
Player.STATE_READY;
Player.STATE_ENDED;
Каждый раз, когда плеер должен буферизировать, он идет:
Player.STATE_READY;
Player.STATE_BUFFERING;
Player.STATE_READY;
Настройка playWhenReady не влияет на состояние.
Все ваши медиа на самом деле играют, когда
playWhenReady && playbackState == Player.STATE_READY
Он воспроизводится при готовности. :)
Ответ 2
Вы можете использовать эту функцию:
public boolean isPlaying() {
return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();
}
Ответ 3
Вы можете использовать exoplayer.getPlayWhenReady()
чтобы проверить, находится ли проигрыватель в состоянии паузы или в состоянии воспроизведения.
Ответ 4
У меня было такое же требование, чтобы обнаружить событие нажатия кнопки воспроизведения/паузы exoplayer. Выше ответы в основном говорили о состоянии не о событии нажатия кнопки.
Это то, что я сделал, чтобы обнаружить нажатие кнопки "Воспроизведение/Пауза", работает отлично.
Шаг 1. Создайте пользовательский класс диспетчера элементов управления и переопределите метод dispatchSetPlayWhenReady
class PlayerControlDispatcher : DefaultControlDispatcher() {
override fun dispatchSetPlayWhenReady(player: Player?, playWhenReady: Boolean): Boolean {
if(playWhenReady) {
// Play button clicked
} else {
// Paused button clicked
}
return super.dispatchSetPlayWhenReady(player, playWhenReady)
}
}
Шаг 2. Установите класс диспетчера настраиваемых элементов управления PlayerControlDispatcher
в представлении проигрывателя.
playerView.setControlDispatcher(PlayerControlDispatcher())
Где playerView - это экземпляр com.google.android.exoplayer2.ui.PlayerView
, который мы объявляем в нашем файле макета.
Ответ 5
Это правильный ответ, просто отлично работает!
Спасибо @Кришна-Шарма!