Получатель PHONE_STATE не работает с получателем на основе контекста - PullRequest
0 голосов
/ 28 мая 2020

Я разрабатываю приложение android, в котором я хочу получить номер входящего вызова, поэтому я создал контекстно-зависимый receiver и зарегистрировал его в моем MainActivity. Но мой приемник никогда не срабатывает, независимо от того, находится ли приложение в foreground или background. Я проверил Android документы, и они упомянули, что вы должны использовать контекстные приемники для Android 8.0+, но они еще не сделали это исключение для широковещательных приемников PHONE_STATE, но я использую контекстно-зависимые, чтобы быть в безопасности. Вот как я регистрирую свой приемник:

private void registerMyReceiver() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    Toast.makeText(context, "Receiver Triggered !!", Toast.LENGTH_SHORT).show();
                }
            };
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction("android.intent.action.PHONE_STATE");
            this.registerReceiver(broadcastReceiver, intentFilter);

        }

    }

Я даже прошу разрешения на время выполнения:

private void grantPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 0);
        }
    }

Заранее спасибо.

1 Ответ

0 голосов
/ 28 мая 2020

Другой способ:

TelephonyManager systemService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if (systemService == null)
        return;
    PhoneStateListener listener = new PhoneStateListener() {
        @Override
        public void onCallStateChanged(int state, String phoneNumber) {
            super.onCallStateChanged(state, phoneNumber);
        }
    };

    systemService.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

требуется разрешение:

android.permission.READ_PHONE_STATE

использовать трансляцию:

<receiver android:name="PhoneStateReceiver">
        <intent-filter android:priority="1000">
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
            <action android:name="android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

в моем проекте.

в коде.

 IntentFilter intentFilter = new IntentFilter();
    intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
  ....//other actions.

попробуйте это.

надеюсь вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...