2012-02-23 11 views
0

ストリームからMP3を再生しようとしていますが、再生を押すと自動的に再生される問題です。また、再生ボタンは、ストリームに設定するだけのオーディオを再生しません。 MP3を自動的に再生させるにはどうしたらいいですか?ストリームを押すとMP3が再生されない

play.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      if (!mediaPlayer.isPlaying()) { 
       try { 
        mediaPlayer.setDataSource(url); 
        mediaPlayer.prepareAsync(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); 

       if(!mediaPlayer.isPlaying()){ 
        mediaPlayer.start(); 
        play.setImageResource(R.drawable.ic_media_pause); 
       }else { 
        mediaPlayer.pause(); 
        play.setImageResource(R.drawable.ic_media_play); 
       } 

       primarySeekBarProgressUpdater(); 
      } 
    }}); 

    sb.setMax(99); 
    sb.setOnTouchListener(this); 

    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setOnBufferingUpdateListener(this); 
    mediaPlayer.setOnCompletionListener(this); 
} 

private void primarySeekBarProgressUpdater() { 
    sb.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100)); 
    if (mediaPlayer.isPlaying()) { 
     notification = new Runnable() { 
      public void run() { 
       primarySeekBarProgressUpdater(); 
      } 
     }; 
     handler.postDelayed(notification,1000); 
    } 
} 

public boolean onTouch(View v, MotionEvent event) { 
    if(v.getId() == R.id.progress_bar){ 
     /** Seekbar onTouch event handler. Method which seeks MediaPlayer to seekBar primary progress position*/ 
     if(mediaPlayer.isPlaying()){ 
      SeekBar sb = (SeekBar)v; 
      int playPositionInMillisecconds = (mediaFileLengthInMilliseconds/100) * sb.getProgress(); 
      mediaPlayer.seekTo(playPositionInMillisecconds); 
     } 
    } 
    return false; 
} 

public void onCompletion(MediaPlayer mp) { 
    play.setImageResource(R.drawable.ic_media_play); 

    mediaPlayer.stop(); 
} 

public void onBufferingUpdate(MediaPlayer mp, int percent) { 
    sb.setSecondaryProgress(percent); 
} 
    } 

何か間違っていますか?私は遊びをクリックして、私のシークバーがいっぱいになるのを見ますが、遊びはありません。

私も、このメッセージが表示されます:あなたはMediaPlayer.OnPreparedListenerを実装する必要があるよう

E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985): 
error (-38, 0) E/MediaPlayer(28985): Error (-38,0) 

答えて

0

が見えます。 prepareAsync()を使用しているので、start()に電話する前にMediaPlayerが準備されるまで待つ必要があります。 onPrepared()コールバックを取得したら、その時点でstart()メソッドを呼び出すことは安全です。

+0

E/MediaPlayer(28985):状態0でコールが停止しました。E/MediaPlayer(28985): エラー(-38、0)E/MediaPlayer(28985):エラー-38,0)がスパムされていて、 – arberb

+0

が動作しなかったので、自分の非同期をコーディングして、非同期の代わりに準備を使用しました – arberb

関連する問題