2013-10-22 2 views
2

나는 다음과 같은 코드를 가지고 있으며, 나가는 호출에 대해 읽었습니다. 울리는 상태는 두 당사자 간의 전화 통화가 연결되어 있고 상대방이 실제로 전화를 걸고 응답하는 것을 볼 수있을 때입니다. 유휴 상태는 통화가 끊어지고 버튼을 눌렀을 때 OFF_HOOK 상태가 된 때입니다 .OFF_HOOK 및 유휴 상태에 있지만 통화 상태가되지 않습니다. 문제가있을 수 있습니다. 도움이 될 것입니다.울리는 상태 Outing Calls

public void onReceive(final Context context, Intent intent) { 
      TelephonyManager Tm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
      Tm.listen(new PhoneStateListener(){ 
       public void onCallStateChanged(int state,String number) { 
        super.onCallStateChanged(state, number); 
        switch (state) { 
         case TelephonyManager.CALL_STATE_IDLE: 
          //when Idle i.e no call 
          Toast.makeText(context, "Phone state Idle", 1).show(); 

          break; 
         case TelephonyManager.CALL_STATE_OFFHOOK: 

          //when Off hook i.e in call 
          //Make intent and start your service here 
          Toast.makeText(context, "Phone state Off hook", 1).show(); 

          break; 
         case TelephonyManager.CALL_STATE_RINGING: 
          Toast.makeText(context, "Phone state Ringing", 1).show(); 
         break; 


         default: 
          break; 
         } 
        }  

      },PhoneStateListener.LISTEN_CALL_STATE); 

답변

3

TelephonyManager.CALL_STATE_RINGING은 수신 전화를위한 것입니다. 나가는 외침을위한 상대방의 둥글게하기를위한 아닙니다 그것.

TelephonyManager.CALL_STATE_RINGING 전화가 걸려오고 전화벨이 울리면 트리거됩니다.

귀하의 정보를 위해서도. 나가는 호출에 대한 상대방의 호출 상태를 감지 할 공용 API는 없습니다.

+0

그래서 상대방이 호출에 응답 할 때 감지 할 수있는 방법이없는 경우 기억할 수없는, 어딘가 온라인 내가 복사이 헬퍼 클래스를 시도? – user2137186

+0

내가 말한대로 .. 거기에 대한 공개 API가 없습니다 .. 당신은 내부 API를 확인할 수 있습니다 .. – stinepike

0

어쩌면

/*Helper class to detect incoming and outgoing calls.*/ 
public class CallHelper { 
    private Activity activity; 
    private TelephonyManager tm; 
    private CallStateListener callStateListener; 
    private OutgoingReceiver outgoingReceiver; 
    public String TelephoneNumber; 
    public boolean InCall = false; 

    public CallHelper(Activity activity) { 
     this.activity = activity; 
     callStateListener = new CallStateListener(); 
     outgoingReceiver = new OutgoingReceiver(); 
    } 

    /*Listener to detect incoming calls.*/ 
    private class CallStateListener extends PhoneStateListener { 

     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      switch (state) { 
       case TelephonyManager.CALL_STATE_RINGING: { 
        TelephoneNumber = incomingNumber; 
        inout = "in"; 
        InCall = false; 
        break; 
       } 
       case TelephonyManager.CALL_STATE_OFFHOOK: { 
        if (!InCall) { 
         InCall = true; 
         //Do your stuff here when in call... 
        } 
        break; 
       } 
       case TelephonyManager.CALL_STATE_IDLE: { 
        InCall = false; 
        break; 
       } 
       default: { 
        InCall = false; 
        break; 
       } 
      } 
     } 
    } 

    /*Broadcast receiver to detect the outgoing calls.*/ 
    public class OutgoingReceiver extends BroadcastReceiver { 
     public OutgoingReceiver() { } 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      TelephoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); 
     } 
    } 

    /*Start calls detection.*/ 
    public void start() { 
     tm = (TelephonyManager) activity.getSystemService(Activity.TELEPHONY_SERVICE); 
     tm.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

     IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL); 
     activity.registerReceiver(outgoingReceiver, intentFilter); 
    } 

    /*Stop calls detection.*/ 
    public void stop() { 
     tm.listen(callStateListener, PhoneStateListener.LISTEN_NONE); 
     activity.unregisterReceiver(outgoingReceiver); 
    } 
}