Android MediaPlayer准备失败:状态=0x1,MediaPlayer.creat()返回null.AAC



我正在从访问音频文件

/data/user/0/app_packagename/files/filename

我没有WRITE_EXTERNALREAD_EXTERNAL权限。

现在,我可以访问保存在/data/user/0/app_packagename/files/中的文件,而无需WRITE_EXTERNALREAD_EXTERNAL权限。

并且可以播放我的应用程序中的所有音频文件。

在我的应用程序中,我正在播放队列中的所有文件。我的一些用户在第一个音频文件完成后无法播放第二个音频文件。

下面是我的代码

void playNext(File varientFile) {
if (mSessionMediaPlayer != null) {
if (mSessionMediaPlayer.isPlaying()) {
mSessionMediaPlayer.stop();
}
mSessionMediaPlayer.release();
mSessionMediaPlayer = null;
}
mSessionMediaPlayer = new MediaPlayer();
if (mSessionMediaPlayer != null) {
Uri uri = Uri.parse(variantFile.getAbsolutePath());                  
mSessionMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mSessionMediaPlayer.setDataSource(this, uri);      
mSessionMediaPlayer.setLooping(false);
mSessionMediaPlayer.prepare();
mSessionMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
playNext(mFiles.get(mNextIndex);
}
});
mSessionMediaPlayer.start();
runScheduler();
}
}

代替

mSessionMediaPlayer=新媒体播放器();

我试过

mSessionMediaPlayer=MediaPlayer.create(getApplicationContext(),uri);

即使是MediaPlayer.create()也在返回nullmSessionMediaPlayer.prepare()正在抛出异常

原因:准备失败。:状态=0x1

我的代码出了什么问题?为什么会得到nullprepare failed?我已经测试了这些文件,它们正在工作,音频文件格式是.aac

无法播放第二个音频文件的同一用户。他能够用相同的代码播放第一个文件。但若同一个方法是从onCompleted()调用的,那个么它就不起作用了。为什么会这样?

有人能帮我解决这个问题吗?

与其每次都创建一个新对象,不如尝试使用相同的Media Player对象,比如这样。

MediaPlayer mSessionMediaPlayer;
mSessionMediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
mSessionMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mSessionMediaPlayer) {
moveToNext(mSessionMediaPlayer,nextUri);
}
});
mSessionMediaPlayer.prepare();
mSessionMediaPlayer.start();

private void moveToNext(MediaPlayer mSessionMediaPlayer,Uri uri){
mSessionMediaPlayer.create(getApplicationContext(), uri);
mSessionMediaPlayer.prepare();
mSessionMediaPlayer.start();
}

最新更新