как вызвать новое действие, когда пользователь отключает входящий вызов с определенного номера

#android #broadcastreceiver

#Android #broadcastreceiver

Вопрос:

Я хочу открыть новое activity , когда пользователь отключает входящий вызов с определенного номера. Я знаю, что мне нужно использовать TelephonyManager и PhoneStateListener прослушивать разные состояния вызова. Я также пробовал приведенный ниже пример, но он открывается activity более одного раза, я хочу открыть только один раз. пожалуйста, помогите мне

 public class Demos extends BroadcastReceiver{

public void onReceive(final Context context, Intent intent) {

    if (!intent.getAction().equals("android.intent.action.PHONE_STATE")) 
         return;        
    else
    {
         final TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);    
         PhoneStateListener callStateListener = new PhoneStateListener() 
         {
             public void onCallStateChanged(int state, String incomingNumber) 
                     {       
                 if((state == TelephonyManager.CALL_STATE_RINGING))
                 {  }
                 if((state==TelephonyManager.CALL_STATE_OFFHOOK))
                 {  }
                 if(!(state == TelephonyManager.CALL_STATE_RINGING) amp;amp; (state==TelephonyManager.CALL_STATE_IDLE) )
                 {
                     if(incomingNumber.equalsIgnoreCase("XXX-XXX-XXXX"))
                     {  Intent i=new Intent(context,Activity_two.class);
                            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(i);
                                telephonyManager.listen(null,  PhoneStateListener.LISTEN_NONE); }
                 }
                    }
         }; telephonyManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE)  
    }
}
  

Комментарии:

1. пожалуйста, не уменьшайте масштаб, если вы не знаете правильного ответа.

Ответ №1:

Можете ли вы попробовать приведенный ниже код вместе с проверкой номера вашего телефона

         final TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        telephony.listen(new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                Log.e("CALL STATE", state   "");
                if(!(state == TelephonyManager.CALL_STATE_RINGING) amp;amp; (state==TelephonyManager.CALL_STATE_IDLE) )
                {
                    Intent i=new Intent(context, yourActivity.class);
                    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(i);
                }
            }
        },PhoneStateListener.LISTEN_CALL_STATE);
  

Комментарии:

1. Действие открывается более одного раза, когда ваше приложение находится на переднем плане. Правильно? Если это так, попробуйте проверить, добавив атрибут android:launchMode=»singleTask» к действию.

2. я думаю, что мой код уже работает, но мне нужно добавить android: launchMode =»singleTask» кстати, спасибо за поддержку