2016-12-15 8 views
0

토글 버튼을 클릭하면 mp3player가 재생되고 클릭하면 멈 춥니 다. 그래서 처음으로 실행하려고하면 작동합니다. 하지만 두 번째 클릭하면 IllegalStateException 및 "E/MediaPlayer (1009) : attachNewPlayer 상태 32에서 호출 한"오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 감사 .
내 코드는 여기에 있습니다 :안드로이드 프로그래밍 for 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