2017-01-11 120 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来检测。