应用程序关闭时Android BroadcastReceiver不工作

应用程序关闭时Android BroadcastReceiver不工作,android,broadcastreceiver,Android,Broadcastreceiver,我正在尝试做一个应用程序,获取呼叫者号码,将其发送到我的web api,获取响应并将其显示为屏幕上的弹出窗口,其中包括有关呼叫的其他信息。这将不是一个公共应用程序。当我在emulator上测试时,它在所有情况下都能正常工作。我在手机上安装了这个应用程序,并像在emulator上一样对它进行了测试,并按预期工作。当我按下“最近的应用”按钮并将其刷出时,它突然停止接听电话并显示弹出窗口。我有正确的AndroidManifest条目 AndroidManifest.xml <uses-permi

我正在尝试做一个应用程序,获取呼叫者号码,将其发送到我的web api,获取响应并将其显示为屏幕上的弹出窗口,其中包括有关呼叫的其他信息。这将不是一个公共应用程序。当我在emulator上测试时,它在所有情况下都能正常工作。我在手机上安装了这个应用程序,并像在emulator上一样对它进行了测试,并按预期工作。当我按下“最近的应用”按钮并将其刷出时,它突然停止接听电话并显示弹出窗口。我有正确的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>
我添加了Firebase以查看来电时发生了什么。在emulator上,它在所有情况下都会向Firebase添加一个条目(应用程序刷出、屏幕锁定等),但在我的手机上,它只会在应用程序在最近的应用程序中处于活动状态时向Firebase添加记录

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


手机:安卓7.0上的小米Redmi Note 4应用了最新的可用更新。

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

用另一种方法修复了问题。而是在AndroidManifest文件中注册BroadcastReceiver,在那里创建了一个前台服务并以编程方式创建了BroadcastReceiver。此外,当活动被破坏时,它也可能会终止服务。我在onTaskRemoved方法中添加了重新启动服务代码,以便在服务随应用程序一起终止时重新启动服务。现在它适用于所有情况。缺点是,除非用户阻止它,否则它必须显示正在进行的通知,这在我的例子中不是问题。

您应该了解miui与背景相关的细节。您可以手动将应用程序添加到白名单中,autostart等。您可以在此处上传编码吗?您应该了解miui与背景相关的细节。您可以手动将应用程序添加到白名单,autostart等。您可以在此处上传编码吗?
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