Android 重启后未收到启动完成通知

Android boot completed notification not received after reboot

我在应用程序清单中注册了一个广播接收器来接收 BOOT_COMPLETED 通知。重新启动移动设备后,我没有收到任何通知。但是,当我打开我的应用程序时,我会收到通知。请协助。

从我的清单中接收启动完成权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

来自我的清单的接收者:

    <receiver android:name=".BootCompletedReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

BootCompletedReceiver class:

public class BootCompletedReceiver extends BroadcastReceiver {

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

        Toast.makeText(context, "Boot Completed Received", Toast.LENGTH_LONG).show();
    }

检查您的设备是否允许该应用程序在后台 运行(抱歉,我还不能发表评论)。

您可能还想尝试 LOCKED_BOOT_COMPLETED 牛轧糖及以上。请参阅此处的 the docs。它允许您在用户解锁屏幕之前收听操作。

网上有一些建议,除了BOOT_COMPLETED操作你还需要一些设备支持的QUICKBOOT_POWERON。 您可以查看此 Q/A 了解详细信息。

为了实现这一点,我还必须添加 android:enabled="false" 然后在用户 select 时按需添加,我以编程方式将其更改为 android:enabled="true" 但这有点复杂试试。

您可以先用这个更改您的代码,看看它是否有效。

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

如果您想尝试禁用逻辑,然后以编程方式启用它,请使用此代码:

private static void changeBootStateReceiver(Context context, boolean enable) {
    ComponentName receiver = new ComponentName(context, BootCompletedReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}

我也喜欢在不再需要时禁用该功能。

特例:

根据设备制造商的不同,有一些关于启动时不同广播的报告:

  • 使用:android.intent.action.REBOOT
  • HTC 使用:com.htc.action.QUICKBOOT_POWERON