Я дам свои два цента за это, поскольку это может помочь другим.
Вы можете настроить onPreparedListener, где вы сможете получить MediaPlayer.MediaPlayer имеет onInfoListener, который сообщит вам, когда мультимедиа буферизируется, или даже первый кадр, который фактически отображается, MEDIA_INFO_VIDEO_RENDERING_START (только API 17+).Я использую это для обновления локальной переменной состояния (что-то вроде: enum VideoPlayerState (BUFFERING, PLAYING, STOPPED, OPEN, PAUSED)) в переопределенном классе VideoView.Вы можете переопределить его установщик, чтобы получить обратный вызов при изменении состояния.Этот обратный вызов может запустить / приостановить ваш таймер.
setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(final MediaPlayer mp) {
mp.setOnInfoListener(new OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
setPlayerState(VideoPlayerState.BUFFERING);
} else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
if (mp.isPlaying()
&& mPlayerState == VideoPlayerState.BUFFERING) {
setPlayerState(VideoPlayerState.PLAYING);
}
}
return false;
}
});
});
Вы также можете переопределить эти методы в VideoView, чтобы переключить состояние:
@Override
public void pause() {
super.pause();
setPlayerState(VideoPlayerState.PAUSED);
}
@Override
public void start() {
super.start();
setPlayerState(VideoPlayerState.PLAYING);
}
@Override
public void stopPlayback() {
super.stopPlayback();
setPlayerState(VideoPlayerState.STOPPED);
}
Надеюсь, это поможет.