2017-01-11 79 views
1

我需要認識到廣播事件時如何識別是否收到傳出呼叫的電話狀態或不

  1. 走出去通話開始,

  2. 的走出去,在接電話接收端和

  3. 的走出去電話掛斷

我能夠獲得來電通話事件,但不能撥打電話事件。

這是我的代碼,請找出我的問題並給出解決方案。

由於提前

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

    // We listen to two intents. The new outgoing call only tells us of an 
    // outgoing call. We use it to get the number. 
    if (intent.getAction() 
      .equals("android.intent.action.NEW_OUTGOING_CALL")) { 
     savedNumber = intent.getExtras() 
       .getString("android.intent.extra.PHONE_NUMBER"); 
    } else { 
     String stateStr = intent.getExtras() 
       .getString(TelephonyManager.EXTRA_STATE); 
     String number = intent.getExtras() 
       .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
     int state = 0; 
     if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) { 
      state = TelephonyManager.CALL_STATE_IDLE; 
     } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
      state = TelephonyManager.CALL_STATE_OFFHOOK; 
     } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 
      state = TelephonyManager.CALL_STATE_RINGING; 
     } 

     onCallStateChanged(context, state, number); 
    } 
} 

回答

0

下面的代碼幫助你獲得的淨工作狀態代碼的onCreate

StateListener phoneStateListener = new StateListener(); 
TelephonyManager telephonyManager =(TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
telephonyManager.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE); 

聽電話的狀態來創建一個內部類。清單文件

class StateListener extends PhoneStateListener { 
@Override 
public void onCallStateChanged(int state, String incomingNumber) { 
super.onCallStateChanged(state, incomingNumber); 
switch (state) { 
    case TelephonyManager.CALL_STATE_RINGING: 
     break; 
    case TelephonyManager.CALL_STATE_OFFHOOK: 
     System.out.println("call Activity off hook"); 
     LockScreenActivity.this.finish(); 
     break; 
    case TelephonyManager.CALL_STATE_IDLE: 
     break; 
} 
} 
}; 

設置權限

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
0

1)走出去通話開始,

  • 您可以識別是否呼出開始不使用下面的代碼

     case TelephonyManager.CALL_STATE_RINGING: 
          isIncoming = true; 
          callStartTime = new Date(); 
          savedNumber = number; 
          onIncomingCallReceived(context, number, callStartTime); 
          break; 
         case TelephonyManager.CALL_STATE_OFFHOOK: 
          //Transition of ringing->offhook are pickups of incoming calls. Nothing done on them 
          if (lastState != TelephonyManager.CALL_STATE_RINGING) { 
           isIncoming = false; 
           callStartTime = new Date(); 
           startRecording(context,"_Out_",number); 
           onOutgoingCallStarted(context, savedNumber, callStartTime); 
          } 
          else 
          { 
           isIncoming = true; 
           callStartTime = new Date(); 
           startRecording(context,"_In_",savedNumber); 
           onIncomingCallAnswered(context, number, callStartTime); 
          } 
    
          break; 
    

2)走出去的呼叫在接收端和 3)收到走出去電話掛斷

但是你無法識別來電轉接至另一端拿起通過使用任何直接的API爲Android不提供任何直接的API來檢測。