应用被杀死时,Android BroadcastReceiver无法正常工作

时间:2018-08-14 09:00:39

标签: android broadcastreceiver

我正在尝试创建一个获取呼叫者号码的应用程序,将其发送到我的网络api,获取响应并将响应显示为屏幕上弹出的窗口,其中包含有关呼叫的其他信息。这不会是公共应用。当我在模拟器上进行测试时,它可以在所有情况下按预期工作。我在手机上安装了应用程序,并像在模拟器上一样对其进行了测试,并按预期工作。当我按“最近使用的应用程序”按钮并将其滑出时,它突然停止接听电话并显示弹出窗口。我有正确的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>

BroadcastReceiver类

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中添加一个条目,但是在我的手机上,仅当应用程序在“最近的”应用程序中处于活动状态时,它才会向Firebase添加记录。

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

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

1 个答案:

答案 0 :(得分:1)

使用另一种方法解决了该问题。而是在AndroidManifest文件中注册BroadcastReceiver,创建一个Foreground服务,并在那里以编程方式创建BroadcastReceiver。同样,当Activity被销毁时,它也可能会终止该服务。我在onTaskRemoved方法上添加了重新启动服务代码,以便在与应用程序一起被杀死时重新启动服务。现在,它适用于所有情况。不利的一面是,除非用户阻止它,否则它必须显示正在进行的通知,这对我来说不是问题。