为了账号安全,请及时绑定邮箱和手机立即绑定

媒体播放器在状态0中调用,错误(-38,0)

媒体播放器在状态0中调用,错误(-38,0)

慕仙森 2019-09-02 11:12:29
我目前正在尝试设计一个简单的应用程序,流媒体互联网广播电台。我有电台的URL,我正在设置媒体播放器    MediaPlayer mediaPlayer = new MediaPlayer();    try {        mediaPlayer.setDataSource(URL);    } catch (IllegalArgumentException e) {        e.printStackTrace();    } catch (SecurityException e) {        e.printStackTrace();    } catch (IllegalStateException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    try {        mediaPlayer.prepare();    } catch (IllegalStateException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    mediaPlayer.start();模拟时程序没有崩溃,但没有播放,我收到以下错误:start called in state 0就在它下面Error (-38,0)有谁知道这意味着什么?我已经阅读了一些有关这些状态错误的内容,但找不到任何适用于我的项目的内容。
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

您需要使用侦听器调用mediaPlayer.start()该onPrepared方法。您收到此错误是因为您mediaPlayer.start()在达到准备状态之前正在调用。


以下是如何做到这一点:


mp.setDataSource(url); 

mp.setOnPreparedListener(this);

mp.prepareAsync();


public void onPrepared(MediaPlayer player) {

    player.start();

}


查看完整回答
反对 回复 2019-09-02
?
largeQ

TA贡献2039条经验 获得超7个赞

似乎错误-38表示状态异常(如错误消息所示)。例如,如果你打电话start(),在歌曲准备好之前,或者你打电话pause(),即使这首歌根本没有播放。


要解决此问题,请在调用方法之前检查mediaPlayer的状态。例如:


if(mediaPlayer.isPlaying()) {

    mediaPlayer.pause();

}

此外,MediaPlayer正在发送事件消息。即使您不需要准备好的事件(尽管在此事件被触发之前不开始播放也是个好主意),您必须设置一个回调侦听器。这也为成立OnErrorListener,OnCompletionListener,OnPreparedListener和OnSeekCompletedListener(如果调用seek方法)。


听众可以简单地附上


mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

    @Override

    public void onPrepared(MediaPlayer mp) {

        // Do something. For example: playButton.setEnabled(true);

    }

});


查看完整回答
反对 回复 2019-09-02
?
PIPIONE

TA贡献1829条经验 获得超9个赞

当我试图获取媒体播放器的当前位置(MediaPlayer.getCurrentPosition())时,我得到了这个错误。我通过跟踪其状态并在调用onPreparedListener之后仅调用getCurrentPosition()方法来解决这个问题。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 2290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信