Я пытаюсь получить номер телефона вызывающего абонента и дату / время звонка после завершения входящего звонка, затем начать действие и передать данные, но приемник широковещания не работает.
Я добавил коднапечатать сообщение на консоли, чтобы проверить, вызывается ли метод 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"));