Я работаю с приложением для Android, которое считывает состояние телефона входящих телефонных звонков. И я успешно зафиксировал состояния звонка, снятия трубки и ожидания. Но проблема в том, что мне нужно получить состояние Ожидание вызова для нового входящего вызова. Когда я пытался поймать состояние нового вызова, он всегда давал одно и то же состояние ВЫКЛЮЧЕНО как для ответа, так и для зависания. Есть ли способ отличить сценарий. ??
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);
}