Personally, I start off a Thread that checks getCurrentPosition()
every 200ms or so until the onCompletion()
event gets fired off:
private class MediaObserver implements Runnable {
private AtomicBoolean stop = new AtomicBoolean(false);
public void stop() {
stop.set(true);
}
@Override
public void run() {
while (!stop.get()) {
progress.setProgress(mediaPlayer.getCurrentPosition());
Thread.sleep(200);
}
}
}
private MediaObserver observer = null;
public void runMedia() {
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener{
@Override
public void onCompletion(MediaPlayer mPlayer) {
observer.stop();
progress.setProgress(mPlayer.getCurrentPosition());
}
});
observer = new MediaObserver();
mediaPlayer.start();
new Thread(observer).start();
}