我正在从访问音频文件
/data/user/0/app_packagename/files/filename
我没有WRITE_EXTERNAL
READ_EXTERNAL
权限。
现在,我可以访问保存在/data/user/0/app_packagename/files/
中的文件,而无需WRITE_EXTERNAL
READ_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()
也在返回null
。mSessionMediaPlayer.prepare()
正在抛出异常
原因:准备失败。:状态=0x1
我的代码出了什么问题?为什么会得到null
或prepare 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();
}