每次我开始我的流时,我都会收到两个 MediaPlayer 错误。



在调试标签“播放”处,我单击了播放按钮。
比我在 MediaPlayer 服务中的“onCreate”被调用,它执行“setAudioStreamTpe”、“setDataSource”、“prepareAsync”,然后是 onPrepared(myMediaPlayer)。
OnPrepared 只执行 mp.start()。之后记录“onPrepared”。然后,在我的服务的“onCreate”结束时,记录“onCreate Service”。

为什么有2个onPrepared?!使用 mp.prepare() 我没有错误。

编码:

    @Override
public void onCreate() {
    mp = new MediaPlayer();
    mp.setOnPreparedListener(this);
    prepareMediaPlayer();
    onPrepared(mp);
    Log.d(TAG, "onCreate Service");
}


    public void prepareMediaPlayer()
{
    try {
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        Log.d(TAG, "setAudiotStreamType");
        mp.setDataSource(PlayerActivity.soundUrl);
        Log.d(TAG, "setDataSource");
        mp.prepareAsync();
        Log.d(TAG, "prepareAsync");

    }
    catch (IOException e) {}
    catch (IllegalArgumentException e) {}
    catch (IllegalStateException e) {}

}


    @Override
public void onPrepared(MediaPlayer mp) {
    mp.start();
    if (PlayerService.mp.isPlaying() == true){
        notification();
        PlayerActivity.mpState = PlayerActivity.PLAYING;
    }
    Log.d(TAG, "onPrepared");
}

最佳答案

你不应该在 onPrepared(mp); 中调用 onCreate() ,它会在 MediaPlayer 准备好后被调用。

public void onCreate() {
    mp = new MediaPlayer();
    mp.setOnPreparedListener(this);
    prepareMediaPlayer();
    Log.d(TAG, "onCreate Service");
}

关于android - 媒体播放器错误 : start called in state 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8711455/

10-11 20:10