The call to VideoView.seekTo()
is a wrapper around MediaPlayer.seekTo()
. This function returns almost immediately even though the actual seeking is still being performed. Therefore you want to wait for seeking to complete via MediaPlayer.OnSeekCompleteListener
.
However, as Reno mentioned, the standard VideoView
does not support OnSeekCompleteListener
.
But you can copy and locally customize the VideoView
class to add this support yourself.
First, start with a copy of VideoView.java. Or you can clone the entire frameworks/base repo but warning it is over 1 gig of data to download.
Copy VideoView.java into your Eclipse Android project and it will start building but fail. Here's what I did to get it to compile:
- Update the package statement to match your project.
- Comment out the references to
MetaData
. The fix for this is on my todo list. These need to be replaced with calls to MediaMetadataRetriever
.
- Replace
mContext
with calls to getBaseContext()
Now you are ready to add the code for OnSeekCompleteListener
. The implementation is similar to the other listeners, i.e OnCompletionListener
.
public class VideoView extends SurfaceView
implements MediaPlayerControl {
// The client's listener which is the notification callback.
private OnSeekCompleteListener mOnSeekCompleteListener;
// Set up MediaPlayer to forward notifications to client.
private MediaPlayer.OnSeekCompleteListener mSeekCompleteListener =
new MediaPlayer.OnSeekCompleteListener() {
public void onSeekComplete(MediaPlayer mp) {
if (mOnCompletionListener != null) {
mOnCompletionListener.onCompletion(mMediaPlayer);
}
}
};
// API for client to set their listener.
public void setOnSeekCompleteListener(OnSeekCompleteListener l)
{
mOnSeekCompleteListener = l;
}
}
Finally, update your own code:
- Update references to
android.widget.VideoView
to use your customized VideoView
.
- Implement a listener and set it via by calling
setOnSeekCompleteListener()
.
Your code now receives notifications when the seek has really completed and it can then perform subsequent seeks.