【发布时间】:2010-04-25 19:02:48
【问题描述】:
我知道您可以使用 Mediaplayer seekto() 从某个时间点开始。
但是有没有办法让曲目(音频播放)在某个点停止?还是必须在计时器循环上使用 if 语句?
【问题讨论】:
我知道您可以使用 Mediaplayer seekto() 从某个时间点开始。
但是有没有办法让曲目(音频播放)在某个点停止?还是必须在计时器循环上使用 if 语句?
【问题讨论】:
似乎不可能(如果我错了,请纠正我)使用媒体播放器执行此操作而不在计时器循环中使用 seekto()。但是,您可以尝试将 AudioTrack 与设置通知标记结合使用:
AudioTrack.setNotificationMarkerPosition
设置通知标记的位置。
并覆盖播放位置更新监听器AudioTrack.OnPlaybackPositionUpdateListener
AudioTrack的播放头位置到达通知标记或增加一定时间时调用回调的接口定义。
【讨论】:
你必须做出会触发getCurrentPosition()的威胁。
当它到达停止点时,你必须停止 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;
}
}
}
在onPreapared回调中启动这个线程。
public void onPrepared(MediaPlayer genericPlayer) {
mTotal = mp.getDuration();
new Thread(this).start();
}
【讨论】:
遗憾的是,AudioTrack 的位置回调似乎被严重破坏了。 http://code.google.com/p/android/issues/detail?id=2563
【讨论】: