Android 当应用被杀死时 BroadcastReceiver 不工作

Android BroadcastReceiver Not Working When App Killed

我正在尝试做一个获取来电号码的应用程序,将其发送到我的网站 api,获取响应并在屏幕上弹出响应,其中包括有关呼叫的其他信息。这不会是 public 应用程序。当我在模拟器上测试时,它在所有情况下都能按预期工作。我在我的手机 phone 上安装了应用程序并像在模拟器上一样对其进行了测试并按预期工作。当我按下 "Recent Apps" 按钮并将其滑出时,它突然停止接听电话并显示弹出窗口。我有适当的 AndroidManifest 条目。

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />

//other parts of manifest file


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

广播接收器Class

public class PhonecallReceiver extends BroadcastReceiver  {

//some declarations

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

    Date currentTime = Calendar.getInstance().getTime();
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("OnReceive");
    myRef.setValue("PhonecallReceiver onReceive.");
    //other codes

我添加了 Firebase 来查看来电时发生了什么。在模拟器上,它在所有情况下(应用程序刷出、屏幕锁定等)都会向 Firebase 添加一个条目,但是在我的 phone 上,它只会在应用程序在最近的应用程序中处于活动状态时向 Firebase 添加记录。

即使从最近的应用中刷出应用,我也需要接收来电数据。

Phone:Android 7.0 上的小米 Redmi Note 4 应用了最新的可用更新。

用另一种方法解决了问题。而是在 AndroidManifest 文件中注册 BroadcastReceiver,创建一个前台服务并在那里以编程方式创建 BroadcastReceiver。此外,当 Activity 被销毁时,它也可能会终止该服务。我在 onTaskRemoved 方法中添加了重启服务代码,以便在它与应用程序一起被杀死时重启服务。现在它适用于所有情况。作为缺点,它必须显示正在进行的通知,除非用户阻止它,这在我的情况下不是问题。