Как получить состояние ожидания вызова нового входящего вызова во время телефонного разговора

Я работаю с приложением для 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);
                        }


person ARUNBALAN NV    schedule 15.10.2015    source источник


Ответы (1)


Я думаю, что опаздываю услышать, но я хотел бы поделиться своим решением: Диспетчер телефона не обеспечивает прямое состояние ожидания в Android. Есть три основных состояния:

1) 'IDLE' - когда устройство находится в режиме ожидания, как правило, после зависания или если вы не используете телефон

2) «ЗВОНОК» - звонок (при входящем звонке)

3) 'OFF_HOOK' - телефон отключен. Теперь вам нужно переключаться между этими тремя состояниями:

Мой логический идентификатор, когда вы выбираете первый вызов, а затем второй вызов поступает в живую линию, поэтому вам нужно проверить состояние звонка (потому что, когда входящий вызов приходит, его обнаруживает состояние 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;
person Jayman Jani    schedule 07.09.2017