Android 如何在通话过程中获取新来电的呼叫等待状态

Android 如何在通话过程中获取新来电的呼叫等待状态,android,phone-call,telephonymanager,phone-state-listener,busy-waiting,Android,Phone Call,Telephonymanager,Phone State Listener,Busy Waiting,我正在使用一个android应用程序,它可以读取来电的手机状态。我成功地捕捉到了振铃、摘机和空闲状态。但问题是,我需要获得新来电的呼叫等待状态。 当我试图捕捉新呼叫的状态时,它总是为应答和挂断提供相同的挂断状态。 有没有办法区分这种情况 公共类CustomPhoneStateListener扩展PhoneStateListener{ 私有静态最终字符串标记=“CallListening”; int prev_state=0; int call_num=0; 私人语境; 公共静态字符串传入\u

我正在使用一个android应用程序,它可以读取来电的手机状态。我成功地捕捉到了振铃、摘机和空闲状态。但问题是,我需要获得新来电的呼叫等待状态。 当我试图捕捉新呼叫的状态时,它总是为应答和挂断提供相同的挂断状态。 有没有办法区分这种情况

公共类CustomPhoneStateListener扩展PhoneStateListener{
私有静态最终字符串标记=“CallListening”;
int prev_state=0;
int call_num=0;
私人语境;
公共静态字符串传入\u nr=null;
公共静态布尔对话框=false;
公共静态布尔值new_call_ring=false;
公共静态布尔割=false;
公共静态字符串第一个\u编号;
公共CustomPhoneStateListener(上下文){
this.context=上下文;
}
@凌驾
public void onCallStateChanged(int状态,字符串incomingNumber){
if(incomingNumber!=null&&incomingNumber.length()>0){
如果(传入的\u nr==null){
进货数量=进货数量;
第一个_编号=收入编号;
调用_num=1;
}
其他的
进货数量=进货数量;
}
开关(状态){
case TelephonyManager.CALL_STATE_响铃:
Log.d(标记“呼叫状态\振铃==>”+传入号码);
上一个状态=状态;
如果(!(第一个数字等于(传入数字))){
如果(!切){
日志d(标签“新呼叫振铃”+来电号码);
新呼叫铃声=真;
}
}
打破
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(标签,“呼叫状态”下挂==>“+传入号码);
如果(!(第一个数字等于(传入数字))){
如果(新呼叫铃声=真){
日志d(标签“新电话接听或挂断”);
}
}
上一个状态=状态;
打破
case TelephonyManager.CALL_STATE_IDLE:
切=真;
Log.d(标记“调用状态\u空闲==>”+传入\u编号);
//NumberDatabase数据库=新的NumberDatabase(mContext);
if((prev_state==TelephonyManager.CALL_state_OFFHOOK)){
上一个状态=状态;
//接完的电话
Log.d(标记“呼叫已应答:”+传入\u nr);

}
我想我来晚了,但我喜欢分享我的解决方案: 电话管理器在android中不提供直接的“等待”状态 主要有三个州:

1) “空闲”-当设备处于空闲状态时,通常在挂断后或如果您不使用手机

2) “振铃”-振铃(来电时)

3) “摘机”-电话已摘机 现在你必须在这三个州之间比赛:

我的逻辑id当您选择第一个来电时,第二个来电进入在线,因此您必须检查振铃状态(因为当来电进入时,其通过振铃状态进行检测),如下所示:

 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;