首页 > 解决方案 > Android 后台服务正在运行但在重新启动时应用程序即使在实施广播接收器后也不会启动

问题描述

我已经设置了一个广播接收器来启动 BOOT_COMPLETED 意图的服务。

接收者在清单中注册

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

RECEIVE_BOOT_COMPLETED 权限也在清单中给出。

我的应用程序在后台运行

package com.rebootandroid.reboot;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.util.Log;

import java.util.Set;

public class Receiver extends BroadcastReceiver {

    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.i("Booted", "true");
        Log.i("action", action);

        NotificationCompat.Builder b = new NotificationCompat.Builder(context.getApplicationContext(), "defautl")
                .setAutoCancel(true)
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentTitle("Boot Intent Received")
                .setContentText("App starting....");
        NotificationManagerCompat nmc = NotificationManagerCompat.from(context.getApplicationContext());
        nmc.notify(111111111, b.build());

        Intent inTent = new Intent(context.getApplicationContext(), RebootService.class);
        inTent.putExtra(RebootService.INTENT_EXTRA, "RECEIVER_CLASS");
        context.getApplicationContext().startService(inTent);
    }
}

但是当我重新启动设备时,我在 logcat 中看到 android.intent.action.BOOT_COMPLETED 被触发并带有标志 FLAG_EXCLUDE_STOPPED_PACKAGES... 这导致我的应用程序没有收到启动完成的意图...

我正在使用使用 android 7.1 的 OPPO A71 和使用 android 6.0.1 的 Redmi 4a

免责声明:相同的代码在模拟器上完美运行。在模拟器中,任何标志都不会触发 BOOT_COMPLETED 意图...

标签: android-studioandroid-intentbroadcastreceiverandroid-service

解决方案


推荐阅读