2013-04-14 23 views
6

私は5曲の音楽プレイリストを持っています。私はちょうどその遊びと停止ボタンがアプリ内の限り動作するようにしたい。そして、私は音楽を止めて、私が他の曲をやりたいときに止めることができます。Android Media Playerは、停止後に再生されません。

これは現在動作しています...音楽はPLAYボタンで再生され、STOPボタンをクリックすると停止しますが、他の曲や同じ曲をもう一度再生したい場合は何も起こりません。助けてください。

public class glavna extends Activity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main); 



    final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.pj1); 
    final MediaPlayer MPRadio2 = MediaPlayer.create(this, R.raw.pj2); 
    final MediaPlayer MPRadio3 = MediaPlayer.create(this, R.raw.pj3); 
    final MediaPlayer MPRadio4 = MediaPlayer.create(this, R.raw.pj4); 
    final MediaPlayer MPRadio5 = MediaPlayer.create(this, R.raw.pj5); 

    final RadioButton rb1, rb2, rb3, rb4, rb5;  

    rb1 = (RadioButton) findViewById(R.id.radio1); 
    rb2 = (RadioButton) findViewById(R.id.radio2); 
    rb3 = (RadioButton) findViewById(R.id.radio3); 
    rb4 = (RadioButton) findViewById(R.id.radio4); 
    rb5 = (RadioButton) findViewById(R.id.radio5); 


    Button btn = (Button) findViewById(R.id.buttonplay); 
    Button btnStop = (Button) findViewById(R.id.buttonStop); 

    btnStop.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View b){ 

     MPRadio1.stop(); 
     MPRadio2.stop(); 
     MPRadio3.stop(); 
     MPRadio4.stop(); 
     MPRadio5.stop(); 


    }; 
    }); 


    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 



      if(rb1.isChecked()) 
      {  

      MPRadio1.start(); 

      } 
     else 
      { 
      if(rb2.isChecked()) 
      { 

       MPRadio2.start(); 
      } 
       else 
       { 
        if(rb3.isChecked()) 
        { 
        MPRadio3.start(); 

       } 
        else 
        { 
         if(rb4.isChecked()) 
         { 
         MPRadio4.start(); 

        } 
         else 
         { 
          if(rb5.isChecked()) 
          { 
          MPRadio5.start(); 

          } 

         } 
        } 
       } 
      }; 
     } 
    } 

     );}} 

答えて

7

再びデータソースを設定し、停止後

mp.reset(); 
mp.setDataSource(MEDIA_PATH); 
mp.prepare(); 
mp.start(); 
+0

私はこれが正しいと確信しているが、文書で提示状態図は、この主張をサポートしていないようです。MediaPlayerのAPIは不十分一般的に設計されたように私は感じる。 – IcedDante

0

するとプレスプレイボタンを開始し、メディアプレーヤーをリセットし、再び曲を再生するには、その後、ボタンを演じる作品はありません - この問題のために、我々は再びオブジェクトを作成することができます停止ボタンで。例えばのための ; -stop.setOnClickListener(新OnClickListener(){

 @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(mPlayer.isPlaying()) 
      mPlayer.stop(); 
      mPlayer = MediaPlayer.create(mediaplayeractivity.this, R.raw.adidas); 
     } 
    });} 
0

プレイは文句を言わない仕事あなたがストップボタンを押した後...ただそれを修正する必要があるオブジェクトの配列としてあなたのMediaPlayerのオブジェクトを作ります。..

final MediaPlayer[] mediaPlayer = {MediaPlayer.create(getApplicationContext(), R.raw.song_name)}; 

stop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      mediaPlayer[0].stop(); 

      mediaPlayer[0] = MediaPlayer.create(getApplicationContext(),R.raw.song_name); 
     } 
    }); 
+0

これは本当に奇妙なように思えます解決策。MediaPlayerオブジェクトの配列を持つ利点は何ですか? – Seabass77

+0

これはどのように動作するのかよく分かりません。しかしanywa私たちは1つのMediaPlayerオブジェクトだけを使用します。mediaPlayer [0] @ Seabass77 –

+0

これは、複数のメディアプレーヤーを持つべきインスタンスが存在するとは思えませんが、重要なパフォーマンスの問題を参照してください、それはそれがすべてだと思います編集:私は2つの異なる曲を再生する場合は、同じメディアプレーヤーを一時停止して開始する必要があります – Seabass77

関連する問題