静态BroadcastReceiver无法接收自定义意图

时间:2018-10-26 20:33:30

标签: android android-intent service broadcastreceiver android-manifest

我的BroadcastReceiver似乎没有收到正在监听的意图。

我正在启动一个必须一直运行的后台服务。每当服务被终止时,它都会向我的BroadcastReceiver发送一个意图,然后该意向重新启动服务。

这是我的服务onDestroy

@Override
public void onDestroy() {
    Log.i(TAG, "onDestroy");
    sendBroadcast(new Intent("com.myapp.app.RESTART_SERVICE"));
    stoptimertask();
    super.onDestroy();
}

这是我的BroadcastReceiver:

public class RestarterBroadcastReceiver extends BroadcastReceiver {

    public RestarterBroadcastReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Service stopped, restarting...");

        context.startService(new Intent(context, ActivityRecognitionService.class));
    }
}

还有Android清单的重要部分:

<receiver
    android:name=".RestarterBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.myapp.app.RESTART_SERVICE"/>
    </intent-filter>
</receiver>

为什么我的BroadcastReceiver没有收到意图?

1 个答案:

答案 0 :(得分:2)

您的问题可能是Android Oreo有效地禁止了隐式广播。解决此问题的最简单方法是使用显式广播而不是隐式广播。

尝试将服务的onDestroy代码更改为以下代码:

@Override
public void onDestroy() {
    Log.i(TAG, "onDestroy");
    // Here you're using an explicit intent instead of an implicit one
    sendBroadcast(new Intent(getApplicationContext(), RestarterBroadcastReceiver.class));
    stoptimertask();
    super.onDestroy();
}

由于您不再使用intent操作,因此您还可以将Android清单更改为以下内容:

<receiver
    android:name=".RestarterBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
</receiver>

希望这会有所帮助!