TelephonyManager не успевает вовремя сработать

Пытаюсь сделать приложение для android, которое бы отклоняло входящий звонок по определенной маске номера и при этом на устройстве не должен сработать звонок и вибрация. Принципиально все работает. Но если у телефона выставлена вибрация вместо звонка, то телефон успевает начать вибрировать, а уже потом срабатывает бесшумный режим и сброс звонка. Есть ощущение, что тот метод, которым я делаю не успевает вовремя сработать и перевести в бесшумный режим.

Подскажите, пожалуйста, как точно отловить входящий звонок до вибрации?

----------


public class IncomingCallReciever extends BroadcastReceiver {

    private Context mContext;
    private Intent mIntent;
    Integer WasState;

    @Override
    public void onReceive(Context context, Intent intent) {

        mContext = context;
        mIntent = intent;
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        int events = PhoneStateListener.LISTEN_CALL_STATE;
        tm.listen(phoneStateListener, events);
    }

    private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {


            String callState = "UNKNOWN";
            switch (state) {
                case TelephonyManager.CALL_STATE_IDLE:
                    callState = "IDLE";

                    break;
                case TelephonyManager.CALL_STATE_RINGING:
//Идет звонок
//Перевожу в режим не беспокоить
                    AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
                    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
               //Тут проверки номера по маске и сброс звонка    
    
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:

                    AfterCall();

                    break;
            }
            Log.i(">>>Broadcast", "onCallStateChanged " + callState);
            super.onCallStateChanged(state, incomingNumber);
        }
    };


Ответы (0 шт):