마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

스위치 케이스문 논리적 오류.. 도와주세요 ㅠ

0 추천
코드는

 

public class MainActivity extends Activity {
 private MediaPlayer sndemb;
 private MediaPlayer sndfir;
 private MediaPlayer sndpol;
 private MediaPlayer sndsil;
 private MediaPlayer sndwar;
 boolean statemb = false;
 boolean statfir = false;
 boolean statpol = false;
 boolean statsil = false;
 boolean statwar = false;
 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        findViewById(R.id.btnemb).setOnClickListener(mClickListener);
        findViewById(R.id.btnfir).setOnClickListener(mClickListener);
        findViewById(R.id.btnpol).setOnClickListener(mClickListener);
        findViewById(R.id.btnsil).setOnClickListener(mClickListener);
        findViewById(R.id.btnwar).setOnClickListener(mClickListener);
       
        sndemb = MediaPlayer.create(this, R.raw.sirenemb);
        sndfir = MediaPlayer.create(this, R.raw.sirenfir);
        sndpol = MediaPlayer.create(this, R.raw.sirenpol);
        sndsil = MediaPlayer.create(this, R.raw.sirensil);
        sndwar = MediaPlayer.create(this, R.raw.sirenwar);
    }
   
    OnClickListener mClickListener = new View.OnClickListener() {
  
  public void onClick(View v) {
   
   switch (v.getId()) {
   case R.id.btnemb:
    if(statemb) {
           sndemb.stop();
           sndemb.setLooping(false);
           statemb = false;
    }
    else {
     sndemb.start();
     sndemb.setLooping(true);
     statemb = true;
    }
    break;
    
   case R.id.btnfir:
    if(statfir) {
           sndfir.stop();
           sndfir.setLooping(false);
           statfir = false;
    }
    else {
     sndfir.start();
     sndfir.setLooping(true);
     statfir = true;
    }
    break;
    
   case R.id.btnpol:
    if(statpol) {
           sndpol.stop();
           sndpol.setLooping(false);
           statpol = false;
    }
    else {
     sndpol.start();
     sndpol.setLooping(true);
     statpol = true;
    }
    break;
    
   case R.id.btnsil:
    if(statsil) {
           sndsil.stop();
           sndsil.setLooping(false);
           statsil = false;
    }
    else {
     sndsil.start();
     sndsil.setLooping(true);
     statsil = true;
    }
    break;
    
   case R.id.btnwar:
    if(statwar) {
           sndwar.stop();
           sndwar.setLooping(false);
           statwar = false;
    }
    else {
     sndwar.start();
     sndwar.setLooping(true);
     statwar = true;
    }
    break;
    
   case R.id.btnstp:
   }
   
  }
 };

}

입니다.

분명히 구상한대로라면 버튼을 한번눌렀을땐 미디어플레이어를 재생하고, 루프를 트루로 반환하고 불린값을 트루로 반환하고, 두번째누르면 미디어플레이러를 멈추고, 루프를 펄스로 반환, 불린값을 펄스로 반환합니다. 이대로라면 세번째 눌렀을 때에 불린값이 펄스이므로 다시 재생이 되야 하는데..! 이상하게 두세번째 눌렀을 때 재생이 안되네요... 분명히 불린값은 펄스일텐데..
NEO MIND (310 포인트) 님이 2014년 2월 28일 질문
로그를 좀 박으시면 좋을것 같네요..
로그 박을려고 했는데 지금은 코드가 너무 난잡해질 것 같아서 아직 안박아놨긴 한데.. 습관적으로 박아야겠네요 앞으로는..ㅋㅋ

1개의 답변

+1 추천

로그가 없어, 정확한 이유를 알기는 어렵지만.. 한가지 가능성을 유추해 보자면,

 

http://developer.android.com/reference/android/media/MediaPlayer.html 링크를 보면, 아래와 같은 내용이 나오는데요..

 

Once in the Stopped state, playback cannot be started until prepare() or prepareAsync() are called to set the MediaPlayer object to the Prepared state again.

 

 setOnPreparedListener 같은것을 사용해서 MediaPlayer가 prepared state에 있는지 확인한 후, play를 해야 정상적으로 play가 이루어 질 것 같습니다.

프로삽질러 (3,040 포인트) 님이 2014년 2월 28일 답변
...