我正在尝试在媒体播放器中播放音频文件,一旦文件完全播放,然后从该特定文件的某个位置循环并继续重复循环。
我见过一种从特定点播放的方法 seekTo() 但我对如何首先完全播放文件然后使用 seekTo 函数感到困惑。
任何帮助,将不胜感激。须藤代码将帮助一个很好的。
添加代码:
这是我尝试过的代码,但在再次播放声音之前它会留下大约一秒钟的间隙。
public void playBackgroundMusic() {
AssetFileDescriptor descriptor = null;
try {
descriptor = context.getAssets().openFd("music/" + FILE_NAME);
try {
this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength());
} catch (IllegalStateException e) {
this.mediaPlayer.reset();
this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
descriptor.getStartOffset(), descriptor.getLength());
}
if (listener != null) {
this.mediaPlayer.setOnCompletionListener(listener);
}
this.mediaPlayer.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
return false;
}
});
this.mediaPlayer.setLooping(false);
this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
this.mediaPlayer.prepare();
this.mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (descriptor != null) {
descriptor.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private OnCompletionListener listener = new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.seekTo(DEFAULT_LOOPING_TIME);
mp.start();
}
};