2017-01-23 5 views
2

Dieser Code funktioniert. Das einzige Problem, das ich habe, ist, wenn ich nicht die App benutze und das Telefon klingelt, die Musik spielt, nachdem ich aufgelegt habe.Musik anhalten, wenn das Telefon klingelt?

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); 
     } 
    } 

Antwort

1

Stellen Sie einfach einen Booleschen Wert ein, der verfolgt, ob die Musik vorher abgespielt wurde. Ich habe gerade deinen Unterricht in der Umgebung gemacht, aber du hast die Idee.

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); 
     } 
    } 
} 
Verwandte Themen