Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 活动结束后不再触发广播接收器';死亡_Android_Xamarin_Broadcastreceiver_Alarmmanager - Fatal编程技术网

Android 活动结束后不再触发广播接收器';死亡

Android 活动结束后不再触发广播接收器';死亡,android,xamarin,broadcastreceiver,alarmmanager,Android,Xamarin,Broadcastreceiver,Alarmmanager,我正试图为我的应用程序计划一个自动启动,每天一个小时。 我有一堆代码,在我的活动运行时(在前台或后台)运行良好,但当活动被终止时(通过任务管理器或强制终止),这些代码就会停止工作。 我找了很多,但没有找到任何帮助 这是我的闪电代码: [BroadcastReceiver(Enabled = true, Exported = true)] public class AutoWakeUpReceiver : BroadcastReceiver { public override void O

我正试图为我的应用程序计划一个自动启动,每天一个小时。 我有一堆代码,在我的活动运行时(在前台或后台)运行良好,但当活动被终止时(通过任务管理器或强制终止),这些代码就会停止工作。 我找了很多,但没有找到任何帮助

这是我的闪电代码:

[BroadcastReceiver(Enabled = true, Exported = true)]
public class AutoWakeUpReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        AutoWakeUpReceiver.SetNextAutoWakeUp(AlarmManager.IntervalDay);

        Intent wakeUpIntent = new Intent(context, typeof(MainActivity));
        wakeUpIntent.SetFlags(ActivityFlags.ReorderToFront | ActivityFlags.BroughtToFront | ActivityFlags.NewTask);
        context.StartActivity(wakeUpIntent);
    }

    public static void SetNextAutoWakeUp(long delayInMillis)
    {
        Intent wakeUpIntent = new Intent(AndroidContext.Instance.MainActivity, typeof(AutoWakeUpReceiver));
        PendingIntent existing = PendingIntent.GetBroadcast(AndroidContext.Instance.MainActivity, 0, wakeUpIntent, PendingIntentFlags.NoCreate);
        existing?.Cancel();

        PendingIntent pending = PendingIntent.GetBroadcast(AndroidContext.Instance.MainActivity, 0, wakeUpIntent, PendingIntentFlags.UpdateCurrent);
        AlarmManager alarmManager = (AlarmManager)AndroidContext.Instance.MainActivity.GetSystemService(Context.AlarmService);

        if (Build.VERSION.SdkInt < BuildVersionCodes.M)
            alarmManager.Set(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + delayInMillis, pending);
        else
            alarmManager.SetAndAllowWhileIdle(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + delayInMillis, pending);
    }
}
我试着在舱单上声明我的接收人,但没有改变任何事情,我读到Xamarin会自己做。 顺便说一下,我在所有android版本(从19到27)中都有这个问题,所以这不是电池优化问题。 我猜这是广播问题,但在活动结束后,我无法让它工作


提前感谢

如果用户明确“强制停止”您的应用程序,则在用户再次明确打开应用程序之前,应用程序将不会收到任何广播,也不会启动

因此,在这种情况下,
BroadcastReceiver
预计不会接收事件。
下面是一个类似问题的好答案:

在活动结束后,您的“BroadcastReceiver”将永远不会保持注册状态(请参阅)。那是因为你的接收者需要注册一些东西。如果你的活动被破坏了,“绑定”就不会再发生了

我建议您运行后台“服务”,并在指定时间启动应用程序(请参阅)

protected override void OnCreate(Bundle bundle)
{
    this.Window.AddFlags(WindowManagerFlags.TurnScreenOn | WindowManagerFlags.DismissKeyguard | WindowManagerFlags.ShowWhenLocked);
    AutoWakeUpReceiver.SetNextAutoWakeUp(0);
}