2016-12-15 2 views
0

私の問題は、私がトグルボタンをクリックすると、mp3playerが再生していると私はそれが停止しているときです。だから初めて走ろうとするとうまくいく。しかし、2回目にクリックすると、IllegalStateExceptionが発生し、「E/MediaPlayer(1009):attachNewPlayerが状態32で呼び出されました」というエラーが発生します。この問題を解決するにはどうすればよいですか?ありがとう。
私のコードはここにある:Android用の多くのトグルボタンforループを使用して

パブリッククラスMyButtonsは、アイドル状態で呼び出されなければならないアクティビティ{

private static final int[] idBtns = { R.id.btn1, R.id.btn2, R.id.btn3, 
     R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 }; 

String[] mpUrls = new String[idBtns.length]; 

ToggleButton[] mbuttons = new ToggleButton[idBtns.length]; 

MediaPlayer mp3player = new MediaPlayer(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mybuttons); 

    mp3player.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    for (int i = 0; i < idBtns.length; i++) { 
     final int k = i; 
     mbuttons[k] = (ToggleButton) findViewById(idBtns[k]); 
     mpUrls[k] = "http://www.testsite.com/def-music-"+ (k + 1) + ".mp3"; 
    } 

    for (int i = 0; i < idBtns.length; i++) { 

     final int k = i; 

     mbuttons[k].setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       boolean on = ((ToggleButton) view).isChecked(); 

       if (on) { 
        try { 
         mp3player.setDataSource(mpUrls[k]); 
         mp3player.prepare(); 
         mp3player.start(); 
         mp3player.setLooping(true); 
        } catch (Exception e) { 
         // TODO: handle exception 
         e.printStackTrace(); 
         Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show(); 
        } 

       } else { 
        if (mp3player.isPlaying()) { 
         mp3player.pause(); 
         mp3player.seekTo(0); 
        } 

       }// if(on)-else statement's end 

      }// onClick's end 
     }); 

    }// for loop's end 

} 

}

enter image description here

答えて

0

setDataSourceを拡張します。もう一度トグルボタンをクリックすると、その状態はアイドル状態であってはなりません。したがって、メディアプレーヤーのリスナーを使用してアプリケーション内の状態を管理する必要があります。また、プレイするたびにメディアプライヤーをリセットすることもできます。しかし、それは悪いユーザ環境を提供する。 有効な状態と無効な状態についてドキュメントを参照できます。 https://developer.android.com/reference/android/media/MediaPlayer.html

関連する問題