Приемник телефонного вещания не работает - PullRequest
0 голосов
/ 23 июня 2018

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

Я добавил коднапечатать сообщение на консоли, чтобы проверить, вызывается ли метод onReceived, но он никогда не печатает.

Мой код AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.inyavic.inyavicsage.distresscallsmanager">

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".AddDistressCallManagerActivity" />
        <activity android:name=".UpdateDistressCallManagerActivity" />
        <activity android:name=".AddDistressCallInfoActivity" />
        <activity android:name=".UpdateDistressCallInfoActivity" />
        <activity android:name=".DistressCallInfoListActivity" />
        <activity android:name=".DistressCallInfoActivity" />
        <activity android:name=".DistressCallManagersListActivity" />

        <receiver
            android:name=".PhoneStateBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

Мой код PhoneStateBroadcastReceiver.java:

package com.inyavic.inyavicsage.distresscallsmanager;

import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

public class PhoneStateBroadcastReceiver extends BroadcastReceiver {

    private static final String TAG = "PhoneStateBroadcastReceiver";
    Context mContext;
    String incomingNum;
    private int prevState;


    @SuppressLint("LongLogTag")
    @Override
    public void onReceive(Context context, Intent intent) {
        TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        CustomPhoneStateListener customPhoneStateListener = new CustomPhoneStateListener();

        // register our listener with TelephonyManager
        telephony.listen(customPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);

        Bundle bundle = intent.getExtras();
        String phoneNum = bundle.getString("incoming_number");
        Log.v(TAG, "phoneNum" + phoneNum);
        mContext = context;

        System.out.println("RECEIVED");
    }

    public class CustomPhoneStateListener extends PhoneStateListener {

        private static final String TAG = "CustomPhoneStateListener";

        @SuppressLint("LongLogTag")
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            if (incomingNumber != null && incomingNumber.length() > 0)
                incomingNum = incomingNumber;

            // Answered call which is ended
            if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
                prevState = state;
                Log.d(TAG, "CALL_STATE_OFFHOOK");
            }
        }
    }

}

В чем может быть проблема и в чем ее решение?

ОБНОВЛЕНИЕ:

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

Это код, который я добавил к методу onCreate моей основной деятельности для динамической регистрации получателя вещания:

PhoneStateBroadcastReceiver broadcastReceiver = new PhoneStateBroadcastReceiver();

this.registerReceiver(broadcastReceiver,
        new IntentFilter("android.intent.action.PHONE_STATE"));
...