2017-01-23 4 views
2

이 코드는 작동합니다. 내가 가지고있는 유일한 문제는 내가 앱을 사용하지 않고 전화 벨이 울리면 내가 끊은 후에 음악이 재생된다는 것입니다.전화벨이 울릴 때 음악을 일시 중지 하시겠습니까?

public void level_one(View view){ 

     mp3 = MediaPlayer.create(this, R.raw.alpha_12); 

     PhoneStateListener phoneStateListener = new PhoneStateListener() { 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       if (state == TelephonyManager.CALL_STATE_RINGING) { 
        mp3.pause(); 
       } else if(state == TelephonyManager.CALL_STATE_IDLE) { 
        mp3.start(); // Runs this line even if I didn't play 
       } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { 
        mp3.pause(); 
       } 
       super.onCallStateChanged(state, incomingNumber); 
      } 
     }; 
     TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
     if(mgr != null) { 
      mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
     } 
    } 

답변

1

음악이 이전에 재생되었는지 여부를 추적하는 부울을 도입하십시오. 방금 주위의 수업을 만들었지 만 그 아이디어를 얻었습니다.

public class MyClass 
{ 
    private boolean isMusicPlaying = false; 

    public void someFunctionWhichStartsMusic() 
    { 
     //start the music 

     isMusicPlaying = true; 
    } 

    public void level_one(View view){ 

     mp3 = MediaPlayer.create(this, R.raw.alpha_12); 

     PhoneStateListener phoneStateListener = new PhoneStateListener() { 
      @Override 
      public void onCallStateChanged(int state, String incomingNumber) { 
       if (state == TelephonyManager.CALL_STATE_RINGING) 
       { 
        mp3.pause(); 
       } 
       else if(state == TelephonyManager.CALL_STATE_IDLE 
          && isMusicPlaying) // pay attention to this! 
       { 
        mp3.start(); 
       } 
       else if(state == TelephonyManager.CALL_STATE_OFFHOOK) 
       { 
        mp3.pause(); 
       } 
       super.onCallStateChanged(state, incomingNumber); 
      } 
     }; 
     TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
     if(mgr != null) { 
      mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
     } 
    } 
}