2017-01-23 13 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); 
     } 
    } 
}