Detect pause/resume in ExoPlayer Detect pause/resume in ExoPlayer android android

Detect pause/resume in ExoPlayer


EDIT---

Please refer to the Player.isPlaying() method which provides this as an API.

"Rather than having to check these properties individually, Player.isPlaying can be called."

https://exoplayer.dev/listening-to-player-events.html#playback-state-changes

--- EDIT END

You need to check playWhenReady with a Player.EventListener. The Playback states of ExoPlayer are independent from the player being paused or not:

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    }  }});

To play/pause the player ExoPlayer provides

player.setPlayWhenReady(boolean)

The sequence of playback states with ExoPlayer with a media file which never stalls to rebuffer is once in each of the four states and does not express play/paused:

Player.STATE_IDLE;Player.STATE_BUFFERING;Player.STATE_READY;Player.STATE_ENDED;

Each time the player needs to buffer it goes:

Player.STATE_READY;Player.STATE_BUFFERING;Player.STATE_READY;

Setting playWhenReady does not affect the state.

All together your media is actually playing when

playWhenReady && playbackState == Player.STATE_READY

It plays when ready. :)


You can use this function:

public boolean isPlaying() {    return exoPlayer.getPlaybackState() == Player.STATE_READY && exoPlayer.getPlayWhenReady();}


It must be that since the other answers were posted, a new method has been provided in Player.EventListener. [EDIT: Now it is Player.Listener, as Player.EventListener has been deprecated]. This works well for me:

override fun onIsPlayingChanged(isPlaying: Boolean) {    // your code here}

If isPlaying is false, it is paused, otherwise playing.