可以使用Player.EventListener接口代替Player.Listener,并在实现onPlayerStateChanged方法时检查事件状态(即播放,暂停,结束等)。在MediaController中发送消息时,使用ExoPlayer的方法来处理状态更改,而不是手动触发监听器。下面是代码示例:
public class MainActivity extends AppCompatActivity implements Player.EventListener {
private SimpleExoPlayer exoPlayer;
private MediaController mediaController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
exoPlayer = new SimpleExoPlayer.Builder(this).build();
exoPlayer.addListener(this);
mediaController = new MediaController(this);
mediaController.setMediaPlayer(new PlayerControl(exoPlayer));
mediaController.setAnchorView(findViewById(R.id.video_view));
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
if (playbackState == Player.STATE_READY && playWhenReady) {
// media is playing
} else if (playbackState == Player.STATE_READY) {
// media is paused
} else if (playbackState == Player.STATE_ENDED) {
// media has ended
}
}
private class PlayerControl implements MediaController.MediaPlayerControl {
private final SimpleExoPlayer player;
public PlayerControl(SimpleExoPlayer player) {
this.player = player;
}
@Override
public void start() {
player.setPlayWhenReady(true);
}
@Override
public void pause() {
player.setPlayWhenReady(false);
}
@Override
public int getDuration() {
return (int) player.getDuration();
}
@Override
public int getCurrentPosition() {
return (int) player.getCurrentPosition();
}
@Override
public void seekTo(int pos) {
player.seekTo(pos);
}
@Override
public boolean isPlaying() {
return player.getPlayWhenReady();
}
@Override
public int getBufferPercentage() {
return player.get