问题描述
所以我有一个应用程序,该应用程序基于使用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上完成广播接收器。如果这是 在这种情况下,请注意,这些限制不适用于前台 服务,可以从您的广播接收器中调用。