отслеживать действие входящего вызова

1

Я знаю, что это заданный вопрос. Используя широковещательный приемник и используя android.intent.action.PHONE_STATE

в теге приемника вы можете узнать действия телефона. Но как я могу определить, является ли он входящим или исходящим?

вот мой код

@Override
public void onReceive(Context context, Intent intent) 
{
    this.context = context ;
    System.out.println(":::called onReceiver:::");
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    telephony.listen(phoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
}
private final PhoneStateListener phoneCallListener = new PhoneStateListener() 
{
        @Override
        public void onCallStateChanged(int state, String incomingNumber) 
        {
            switch(state)
            {
            case TelephonyManager.CALL_STATE_RINGING:
                 isRinging = true;
                 break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                 if (isRinging) 
                 {
                     hasAttended = true ;
                     isRinging = false;
                 } 
                 break;
            case TelephonyManager.CALL_STATE_IDLE:
                 if (hasAttended)
                 {
                     isCallEnded = true ;
                     hasAttended = false;
                 }
                 break;
            }
            if(isCallEnded)
            {
                isCallEnded=false;
                Intent callIntent = new Intent(context.getApplicationContext(),MyActivity.class);
                callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(callIntent);
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };

здесь каждый раз, когда создается объект phoneCallListener и каждый раз увеличивает скорость вызова onCallStateChanged на единицу.

  • 0
    @juli-Have juli-Вы решили эту проблему .. ??
  • 0
    @NilayOnAndroid да ... код работает .. но я создал одноэлементный класс для phoneStateListener, чтобы получить тот же экземпляр и установить логические флаги
Теги:
call
callstack

1 ответ

1
Лучший ответ

Это удобный учебник, в котором используется как широковещательный приемник, так и файл android.intent.action.PHONE_STATE, который создает разные тосты для отображения в зависимости от состояния вызовов. Когда вы получите эту работу, вы сможете манипулировать кодом, чтобы делать то, что вы хотите, когда звонок является входящим или исходящим

Сначала ваш класс должен extend BroadcastReceiver

Затем вам нужно создать метод, который будет прослушивать состояние телефонов... PhoneStateListener который будет слушать, когда изменяется состояние телефона

Затем выполните простой switch case чтобы поймать вызов в зависимости от того, является ли он входящим вызовом или исходящим вызовом

РЕДАКТИРОВАТЬ

Все, что вам нужно сделать, это написать код, чтобы проверить, было ли предыдущее состояние "звонить". Если текущее состояние неактивно, а предыдущее состояние звонит, они отменили/пропустили вызов. Если текущее состояние отключено и предыдущее состояние звонит, они ответили на звонок.

switch(state){
        case TelephonyManager.CALL_STATE_RINGING:
             Log.i(LOG_TAG, "RINGING");
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_OFFHOOK:
             Log.i(LOG_TAG, "OFFHOOK");

             if (!wasRinging) {
                 // Start your new activity
             } else {
                 // Cancel your old activity
             }

             // this should be the last piece of code before the break
             wasRinging = true;
             break;
        case TelephonyManager.CALL_STATE_IDLE:
             Log.i(LOG_TAG, "IDLE");
             // this should be the last piece of code before the break
             wasRinging = true;
             break;
    }
  • 0
    Привет ... я особенно хочу, в каком случае вы можете сказать это как входящий вызов (не пропущенный вызов) .ie., если state = TelephonyManager.CALL_STATE_RINGING, то вызов является входящим, но как определить, посещен ли вызов или пропущен. Я стремлюсь показать всплывающее окно в соответствии с результатами
  • 0
    я добавил еще код к ответу, который должен проверить, был ли ответ на вызов или пропущен ... вы можете просто добавить тост в код, который будет всплывать в зависимости от того, что произошло, и поместить любую информацию в тост, который вы хотите
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню