[英]Playing song one after another causes MP3Extractor error
@Override
public void onCreate(Bundle savedInstanceState) {
...
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
playAudio(getNextAudioFile());
}
});
..
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
}
private boolean playAudio(String file) {
if(file.isEmpty()) {
return true;
}
if(mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
}
mMediaPlayer.reset();
mAudioFile = new File(mBaseAudioDir, file);
if(mAudioFile.canRead()) {
try {
mMediaPlayer.setDataSource(mAudioFile.getPath());
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
return false;
} catch (IllegalStateException e) {
return false;
} catch (IOException e) {
return false;
}
mMediaPlayer.start();
return true;
} else {
return false;
}
}
它有效,但歌曲結束后我在日志中有這個錯誤信息:
03-13 12:52:05.101:ERROR / MP3Extractor(34):無法重新同步。 信號流結束。 03-13 13:16:59.585:INFO / StagefrightPlayer(34):setDataSource('/ mnt / sdcard / Audio / sound.mp3')
你真的不應該只有空的catch塊,你可能會得到一個解釋錯誤,但你只是忽略它試試這個:
try {
mMediaPlayer.setDataSource(mAudioFile.getPath());
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
Log.e(TAG, "mMediaPlayer IllegalArgumentException " ,e);
return false;
} catch (IOException e) {
Log.e(TAG, "mMediaPlayer IOException" ,e);
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.