2012-01-03 9 views
2

ストリームを開始するたびに、2つのMediaPlayerエラーが発生します。メディアプレイヤーエラー:状態4で開始されました

01-03 12:04:35.738: D/PlayerActivity(10164): play
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): start called in state 4
01-03 12:04:35.742: E/MediaPlayer(10164): error (-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): Error (-38,0)
01-03 12:04:38.261: D/PlayerService(10164): onPrepared

「再生」タグでは、再生ボタンをクリックしました。 "setAudioStreamTpe"、 "setDataSource"、 "prepareAsync"、そしてonPrepared(myMediaPlayer)を実行するMediaPlayerサービスの "onCreate"よりも呼び出されます。 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"); 
} 
+0

を行ってもいいだろうonPrepares呼び出します。 – MByD

+0

コードが追加されました。それが役に立てば幸い! – Leandros

答えて

6

あなたはonCreate()onPrepared(mp);を呼ぶべきではないのMediaPlayerの準備ができたら、それが呼び出されます。

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

うーん。とても簡単。ありがとう! :) – Leandros

0

状態4はMediaplayer状態

を準備していると我々は

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

や他のことのように他のアクションを呼び出すこと。

それはあなたが

Mediaplayer.prepare() 

または

Mediaplayer.prepareAsync() 

を呼び出した後、あなたが

Mediaplayer.Onprepared() 

を呼び出す必要がないことを見ることができますOnprepared();

であなたのコードを1としてこれは、コード自体を入力してくださいMediaPlayerのは 準備ができていたら、ちょうど

prepareMediaPlayer(); 

onPrepared(mp); 

を削除し、

関連する問題