我正在使用一个 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);
}