android-Boot Receiver无法启动

问题描述

所以我有一个应用程序,该应用程序基于使用AlarmManager的重复任务,并且如果设备重启,我希望对警报进行初始化

因此,我制作了一个启动接收器,代码如下:

    [BroadcastReceiver(Enabled = true)]
    [IntentFilter(new[] { Intent.ActionBootCompleted })]
    public class BootReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context,Intent intent)
        {
            Log.Write("BootCompleted Alarm was received.");
            Alarms.Init(context);
        }
    }

我还使用以下方式获得了许可:

[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]

在我的设备设置上查看该应用程序的权限时,它具有该权限。

那么,为什么不触发?

解决方法

新api中的某些限制在您注册接收基于系统事件的广播(例如AlarmManager)时会导致问题

在文档Statically registering a Broadcast Receiver with an Intent Filter中:

在Android 8.0(API 26及更高版本)中,Google placed limitations 应用程序可以在用户不直接与他们进行交互时执行。这些 局限性会影响后台服务和隐式广播 接收者,例如Android.Content.Intent.ActionBootCompleted。因为 这些限制中,您可能难以注册Boot 在较新版本的Android上完成广播接收器。如果这是 在这种情况下,请注意,这些限制不适用于前台 服务,可以从您的广播接收器中调用。

Implicit Broadcast Exceptions

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...