开发者

Stopping a track (at a certain point) on Android

I know you can seekto() with Mediaplayer, to start at a certain point.

But is there a way to make a track (开发者_C百科the audio playing) stop at a certain point? Or would an if statement on a timer loop have to be used?


Doesn't seem possible (correct me if I'm wrong) to do this with media player without resorting to seekto() in a timer loop. However you could try using an AudioTrack in conjunction with setting a notification marker:

AudioTrack.setNotificationMarkerPosition

Sets the position of the notification marker.

and overriding the playback position update listener AudioTrack.OnPlaybackPositionUpdateListener

Interface definition for a callback to be invoked when the playback head position of an AudioTrack has reached a notification marker or has increased by a certain period.


You have to make threat that will trigger getCurrentPosition().

When it will reach stop point, you have to stop MediaPlayer.

public void run() {
    while (mp != null && mPosition < mTotal) {
        try {
            Thread.sleep(500); // you can modify sleep time for better accuracy
            if (mp.isPlaying()) {
                mPosition = mp.getCurrentPosition();
                if (mPosition == mYourStopPoint) { //remember to set mYourStopPoint
                    mp.stop();
                    break;
                }
            }
        } catch (InterruptedException e) {
            return;
        } catch (Exception e) {
            return;
        }

    }
}

Start this Thread in onPreapared callback.

public void onPrepared(MediaPlayer genericPlayer) {
    mTotal = mp.getDuration();
    new Thread(this).start();
}


Sadly, AudioTrack's position callbacks appear to be fairly seriously broken. http://code.google.com/p/android/issues/detail?id=2563

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜