我正在尝试在我的应用程序中播放一些音频,并且我一直收到错误:
E/MediaPlayer: stop called in state 1
V/MediaPlayer: message received msg=100, ext1=-38, ext2=0
E/MediaPlayer: error (-38, 0)
我已经检查了许多其他答案,但是所有人都说你需要调用prepareAsync()或prepare()来防止这种情况,但在我的情况下,我有,但我仍然得到错误。我也试过这两个,他们没有阻止错误。这是我的代码:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(message.getVoice());
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
});
我不知道为什么这不起作用,所有这些都被try catch块所包围,它也没有给我任何提示。从服务器接收音频文件,我可以确认它没有返回null。
答案 0 :(得分:0)
尝试像这样设置dataSource ..
MediaPlayer player = MediaPlayer.create(this, Uri.parse(message.getVoice()));
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
答案 1 :(得分:-1)
出于某种原因,更改onPreparedListener修复所有内容的位置:
mediaPlayer.setOnPreparedListener(this);
然后继承该方法并使用:
@Override
public void onPrepared() {
Do stuff
}
这不应该做任何事情,但在我的情况下它起作用了。