Mediaplayer错误:在状态4中启动调用

问题描述 投票:3回答:2

每次我开始我的流,我得到两个MediaPlayer错误。

01-03 12:04:35.738:D / PlayerActivity(10164):玩 01-03 12:04:35.742:D / PlayerService(10164):setAudiotStreamType 01-03 12:04:35.742:D / PlayerService(10164):setDataSource 01-03 12:04:35.742:D / PlayerService(10164):prepareAsync 01-03 12:04:35.742:E / MediaPlayer(10164):在状态4中调用 01-03 12:04:35.742:E / MediaPlayer(10164):错误(-38,0) 01-03 12:04:35.742:D / PlayerService(10164):onPrepared 01-03 12:04:35.742:D / PlayerService(10164):onCreate Service 01-03 12:04:35.750:E / MediaPlayer(10164):错误(-38,0) 01-03 12:04:38.261:D / PlayerService(10164):onPrepared

在Debug标签“play”中,我点击了播放按钮。比调用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");
}
android service media-player
2个回答
7
投票

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

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

0
投票

国家4意味着Mediaplayer正在准备状态

我们称之为其他行为

Mediaplayer.start() 
Mediaplayer.stop() 
Mediaplayer.pause() 

或任何其他的东西。

根据你的代码,它是Onprepared();

你可以在打电话后看到

Mediaplayer.prepare()

要么

Mediaplayer.prepareAsync()

你不需要打电话

Mediaplayer.Onprepared()

一旦MediaPlayer准备就绪,它将调用onPrepares

onPrepared(mp);

prepareMediaPlayer();

你会很高兴

© www.soinside.com 2019 - 2024. All rights reserved.