onCallStateChanged не работает в onRecieve - PullRequest
0 голосов
/ 07 октября 2018

Я хочу заблокировать все входящие / исходящие вызовы для пользователей моего приложения, кроме определенного белого списка.Я определил получателя.Проблема заключается в том, что когда пользователь набирает номер телефона, который не существует в белом списке, он в первый раз может позвонить, а после первого звонка звонок заблокирован.Он должен всегда блокировать вызов черного списка.Ниже мой приемник в манифесте.Этот код прекрасно работает для входящего звонка и блокирует номера черного списка. Я не знаю причину:

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

    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

    this.context = context;
    if(!intent.getAction().equals("android.intent.action.PHONE_STATE")){
        return;
    }
    telephony = (TelephonyManager) context.getApplicationContext()
            .getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Class c = Class.forName(telephony.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(telephony);

    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        databaseHelper=OpenHelperManager.getHelper(context, DatabaseHelper.class);
        connectionRestrictions = databaseHelper.getConnectionRestrictionDao();
    } catch (SQLException ex) {

    }
    telephony.listen(new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {


            if(!incomingNumber.equals("") && incomingNumber != null ){
                switch (state) {
                    case TelephonyManager.CALL_STATE_RINGING:
                        if ((incomingNumber != null)) {
                            try {
                                inComingCallAuthorization(((ParentalControl)context.getApplicationContext()).makeCheckPhoneNumber(incomingNumber));
                            } catch (RemoteException e) {
                                e.printStackTrace();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
                        break;
                    case TelephonyManager.CALL_STATE_IDLE:
                        // your logic here

                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        try {
                            outGoinCallAuthorization(((ParentalControl)context.getApplicationContext()).makeCheckPhoneNumber(incomingNumber));
                        } catch (RemoteException e) {
                            e.printStackTrace();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        } catch (Exception e){
                            e.printStackTrace();
                        }


                        break;
                    default:

                        break;
                }
            }
            super.onCallStateChanged(state, incomingNumber);

        }
    }, PhoneStateListener.LISTEN_CALL_STATE);

}

манифест:

      <receiver
            android:name=".reciver.CallServiceReciver">
            <intent-filter android:priority="2147483647">
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...