2

我正在使用读取来电电话状态的android应用程序。我已经成功捕获了振铃,摘机和闲置状态。但问题是我需要获得来电的呼叫等待状态。 当我试图赶上新呼叫的状态它总是给予相同的状态OFFHOOK回答挂断。 有什么办法来区分这种情况。如何在电话交谈中获得新来电的呼叫等待状态

public class CustomPhoneStateListener extends PhoneStateListener { 
 
    private static final String TAG = "CallListening"; 
 
    int prev_state=0; 
 
    int call_num = 0; 
 
    private Context context; 
 
    public static String incoming_nr = null; 
 
    public static Boolean dialog = false; 
 
    public static Boolean new_call_ring=false; 
 
    public static Boolean cut = false; 
 
    public static String first_number ; 
 
    public CustomPhoneStateListener(Context context){ 
 
     this.context = context; 
 
    } 
 
    @Override 
 
    public void onCallStateChanged(int state, String incomingNumber){ 
 

 
     if(incomingNumber!=null&&incomingNumber.length()>0){ 
 
      if(incoming_nr == null){ 
 
       incoming_nr=incomingNumber; 
 
       first_number = incomingNumber; 
 
       call_num=1; 
 
      } 
 
      else 
 
       incoming_nr = incomingNumber; 
 
     } 
 
     switch (state) { 
 
        case TelephonyManager.CALL_STATE_RINGING: 
 
         Log.d(TAG, "CALL_STATE_RINGING ==>" + incoming_nr); 
 
         prev_state = state; 
 
         if(!(first_number.equals(incoming_nr))){ 
 
          if(!cut){ 
 
           Log.d(TAG,"new call ringing "+incoming_nr); 
 
           new_call_ring = true; 
 
          } 
 
         } 
 
         break; 
 
        case TelephonyManager.CALL_STATE_OFFHOOK: 
 
         Log.d(TAG, "CALL_STATE_OFFHOOK ==>" + incoming_nr); 
 
         if(!(first_number.equals(incoming_nr))){ 
 
          if(new_call_ring=true){ 
 
           Log.d(TAG,"new call answered or hangup"); 
 
          } 
 
         } 
 
         prev_state = state; 
 
         break; 
 
        case TelephonyManager.CALL_STATE_IDLE: 
 
         cut = true; 
 
         Log.d(TAG, "CALL_STATE_IDLE==>" + incoming_nr); 
 
         // NumberDatabase database=new NumberDatabase(mContext); 
 
         if ((prev_state == TelephonyManager.CALL_STATE_OFFHOOK)) { 
 
          prev_state = state; 
 
          //Answered Call which is ended 
 
          Log.d(TAG, "The call is answered :" + incoming_nr); 
 
         }

回答

0

我想我来晚了听到,但我想分享我的解决方案: 电话经理不在的Android 提供直接的“等待”状态有主要三种状态:

1)'IDLE' - 当设备通常在挂机后或者如果你不使用电话时

2)'RINGING' - 振铃(当来电时)

3)“OFF_HOOK” - 这款手机打爆 现在你有这三个国家之间发挥:

我的逻辑ID号时,第一个电话来了,你挑,比第二个电话进来住行,所以你必须检查铃声状态(因为当来电呼叫来自其检测到RINGING状态),如下所示:

case TelephonyManager.CALL_STATE_RINGING: 
       isIncoming = true; 
       incomingNumber1 = incomingNumber; 
       if(lastState==TelephonyManager.CALL_STATE_OFFHOOK) 
       {//its in waiting state add your logic detect 2nd number hear 
        Log.e("Hear","2nd call come "); 
       } 
       else 
       { 
        //not in waiting state only first call detect only line 1 in ringing 
       } 

       break;