メディア プレーヤーでオーディオ ファイルを再生しようとしていますが、ファイルが完全に再生されたら、その特定のファイルの特定の位置からループし、ループを繰り返し続けます。
特定のポイントから再生する seekTo() メソッドを見たことがありますが、最初にファイルを完全に再生してから seekTo 関数を使用する方法がわかりません。
どんな助けでも大歓迎です。sudo コードが役に立ちます。
コードの追加:
これが私が試したコードですが、サウンドを再度再生する前に約 1 秒間のギャップが残ります。
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();
}
};