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

我目前正在尝试设计一个简单的应用程序,流媒体互联网广播电台。我有电台的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)

有谁知道这意味着什么?


我已经阅读了一些有关这些状态错误的内容,但找不到任何适用于我的项目的内容。


慕仙森
浏览 2291回答 3
3回答

HUH函数

您需要使用侦听器调用mediaPlayer.start()该onPrepared方法。您收到此错误是因为您mediaPlayer.start()在达到准备状态之前正在调用。以下是如何做到这一点:mp.setDataSource(url); mp.setOnPreparedListener(this);mp.prepareAsync();public void onPrepared(MediaPlayer player) {    player.start();}

largeQ

似乎错误-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);    }});

PIPIONE

当我试图获取媒体播放器的当前位置(MediaPlayer.getCurrentPosition())时,我得到了这个错误。我通过跟踪其状态并在调用onPreparedListener之后仅调用getCurrentPosition()方法来解决这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android