Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓MediaPlayer“;在状态0(错误-38,0)下调用停止”;准备好了吗_Android_Android Mediaplayer - Fatal编程技术网

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的修复位置”是什么意思?