2014-03-19 7 views
0

처리 된 미디어 플레이어가 수신 및 발신 전화 서비스가 중지 된 미디어 플레이어에 대해 처리하기를 원하는 서비스가 있으며 통화 흐름이 끝나면 재생이 재개됩니다. 이제는 수신 및 발신 전화에서 재생을 중지하고 TelephonyManager를 재생하는 코드를 추가해야합니다 .CALL_STATE_IDLE : 음악이 시작되면 잠시 후 이야기하고 어떻게 고쳐야합니까?BroadcastReceiver의 수신 및 발신 전화

public class CallReceiver extends BroadcastReceiver{ 
TelephonyManager telManager; 
Context context; 
boolean startedCall = false; 

@Override 
public void onReceive(Context context, Intent intent) { 


this.context=context; 


telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); 

} 

private final PhoneStateListener phoneListener = new PhoneStateListener() { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
    super.onCallStateChanged(state, incomingNumber); 
    try { 
     switch (state) { 
     case TelephonyManager.CALL_STATE_RINGING: { 
      if(incomingNumber!=null) 
      { 
       //incoming call 
       MediaService.stopMP(); 
       startedCall = true; 
      } 

     break; 
     } 
     case TelephonyManager.CALL_STATE_OFFHOOK: { 
      if(incomingNumber!=null) 
      { 
       //outgoing call 
       MediaService.stopMP(); 
       startedCall = true; 
      } 

     break; 
     } 
     case TelephonyManager.CALL_STATE_IDLE: { 
      if(startedCall) 
      { 
       MainActivity.titleMusic.setVisibility(View.VISIBLE); 
       MainActivity.Play(); 
       MediaService.startMP(); 
       startedCall = false; 
      }     

     break; 
     } 
     default: { } 
     } 
     } catch (Exception ex) { 

     } 
    } 
}; 
} 

답변

2

때마다 호출 상태를 울리는 것은 전에 통화 국가가 IDEL해야 걸려 오는 전화를받을, 그래서 당신은 상태를 확인하는 플래그 부울을 설정해야합니다, TelephonyManager.CALL_STATE_IDLE해야하기 전에;

public class CallReceiver extends BroadcastReceiver{ 
    TelephonyManager telManager; 
    Context context; 

    @Override 
    public void onReceive(Context context, Intent intent) {  
     this.context=context;  
     private boolean startedCall = false; // New added boolean  
     telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);  
    } 

    private final PhoneStateListener phoneListener = new PhoneStateListener() { 
    @Override 
    public void onCallStateChanged(int state, String incomingNumber) { 
    super.onCallStateChanged(state, incomingNumber); 
    try { 
     switch (state) { 
      case TelephonyManager.CALL_STATE_RINGING: { 
       if(incomingNumber!=null) { 
        //incoming call 
        MainActivity.stopMP() 
       }  
       break; 
      } 
      case TelephonyManager.CALL_STATE_OFFHOOK: {  
       startedCall = true; // Newly added code  
       if(incomingNumber!=null) { 
        //outgoing call 
        MainActivity.stopMP(); 
       } 
       break; 
      } 
      case TelephonyManager.CALL_STATE_IDLE: { 
       if(startedCall) { 
        MainActivity.titleMusic.setVisibility(View.VISIBLE); 
        MainActivity.Play(); 
        MediaService.startMP(); 
       }   
       break; 
      } 
      default: { } 
     } 
     } catch (Exception ex) { 

     } 
    } 
    }; 
} 
+0

발신 전화가 켜지지 않는 것처럼 보이고 수신 전화가 대화 배경에서 재생되는 경우에도 통화가 다시 중단 버퍼에서 시작됩니다. 문제의 코드를 수정했습니다 – user3064772

+0

도움이 될 수 있습니다 : http://stackoverflow.com/questions/13377852/handling-incoming-calls-in-android-application – YasirSE

관련 문제