Android 安卓MediaPlayer“;在状态0(错误-38,0)下调用停止”;准备好了吗
我正在尝试在我的应用程序中播放一些音频,但不断出现错误:Android 安卓MediaPlayer“;在状态0(错误-38,0)下调用停止”;准备好了吗,android,android-mediaplayer,Android,Android Mediaplayer,我正在尝试在我的应用程序中播放一些音频,但不断出现错误: E/MediaPlayer: stop called in state 1 V/MediaPlayer: message received msg=100, ext1=-38, ext2=0 E/MediaPlayer: error (-38, 0) 我检查了许多其他答案,但都说需要调用prepareAsync()或prepare()来防止出现这种情况,但在我的例子中,我检查了,我仍然得到了错误。我也尝试过这两种方法,但它们并没有阻止错
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 尝试这样设置数据源
MediaPlayer player = MediaPlayer.create(this, Uri.parse(message.getVoice()));
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
出于某种原因,更改onPreparedListener的位置修复了所有问题:
mediaPlayer.setOnPreparedListener(this);
然后继承该方法并使用:
@Override
public void onPrepared() {
Do stuff
}
这本不应该做任何事情,但在我的情况下,它起了作用。什么
message.getVoice()
return type?message.getVoice()是字符串。还要检查文件路径字符串,你在其中得到了什么?我不能给你URL,但是它是正确的,我可以在我的浏览器上访问它,所以你正在尝试在线播放它…这与我的代码做的事情完全相同,但这只是一种更长的方式。此方法返回相同的错误,除非将整个media player类粘贴到此处。我使用的是默认的media player类,并且除了实例声明之外,您还有与之相关的所有代码。是否尝试从mp.start()开始
而不是mediaPlayer.start()代码>?这没什么区别,它们都引用了同一个媒体播放器实例。你说的“更改onPreparedListener的修复位置”是什么意思?