I have modified this.
I did the English do not ask the answer.
Cocos2dxMusic.java
public void playBackgroundMusic(final String pPath, final boolean isLoop) {
if (this.mCurrentPath == null) {
// it is the first time to play background music or end() was called
this.mBackgroundMediaPlayer = this.createMediaplayer(pPath);
this.mCurrentPath = pPath;
} else {
//if (!this.mCurrentPath.equals(pPath)) { //-removed
// play new background music
// release old resource and create a new one
if (this.mBackgroundMediaPlayer != null) {
this.mBackgroundMediaPlayer.release();
}
this.mBackgroundMediaPlayer = this.createMediaplayer(pPath);
// record the path
this.mCurrentPath = pPath;
//} //-removed
}
if (this.mBackgroundMediaPlayer == null) {
Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: background media player is null");
} else {
// if the music is playing or paused, stop it
// this.mBackgroundMediaPlayer.stop(); //-removed
this.mBackgroundMediaPlayer.setLooping(isLoop);
try {
//this.mBackgroundMediaPlayer.prepare(); //-removed
//this.mBackgroundMediaPlayer.seekTo(0); //-removed
//this.mBackgroundMediaPlayer.start(); //-removed
this.mBackgroundMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mBackgroundMediaPlayer.seekTo(0);
mBackgroundMediaPlayer.start();
}
});
this.mBackgroundMediaPlayer.prepareAsync();
this.mPaused = false;
} catch (final Exception e) {
Log.e(Cocos2dxMusic.TAG, "playBackgroundMusic: error state");
}
}
}
private MediaPlayer createMediaplayer(final String pPath)
{
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.reset();
try {
if (pPath.startsWith("/")) {
final FileInputStream fis = new FileInputStream(pPath);
mediaPlayer.setDataSource(fis.getFD());
fis.close();
} else {
final AssetFileDescriptor assetFileDescritor = this.mContext.getAssets().openFd(pPath);
mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(), assetFileDescritor.getStartOffset(), assetFileDescritor.getLength());
}
//mediaPlayer.prepare(); //-removed
mediaPlayer.setVolume(this.mLeftVolume, this.mRightVolume);
} catch (final Exception e) {
mediaPlayer = null;
}
return mediaPlayer;
}