我正计划在给定时间每天为我的应用计划一次自动启动。 我有一堆代码,只要我的活动正在运行(在前台或后台),但是当活动被杀死时(通过任务管理器或被强制杀死),这会停止工作。 我搜索了很多,但没有任何帮助。
这是我减轻的代码:
[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);
}
}
我也把它放在我的OnCreate()活动中,以便屏幕解锁并点亮(工作),并设置第一个警报:
protected override void OnCreate(Bundle bundle)
{
this.Window.AddFlags(WindowManagerFlags.TurnScreenOn | WindowManagerFlags.DismissKeyguard | WindowManagerFlags.ShowWhenLocked);
AutoWakeUpReceiver.SetNextAutoWakeUp(0);
}
我尝试在清单中声明我的接收器,但没有改变任何东西,我读到Xamarin会自己做。 顺便说一下,我在所有Android版本(从19到27)都有这个问题,所以它不是电池优化问题。 我想这是一个广播问题,但我无法在活动结束后使其发挥作用。
提前致谢
答案 0 :(得分:2)
活动死亡后,您的'BroadcastReceiver'永远不会保持注册状态(请查看this)。那是因为你的接收器需要注册的东西。如果您的活动被破坏,那么“绑定”将不再发生。
我建议您运行后台“服务”,并在指定时间启动应用程序(请查看this)。
答案 1 :(得分:1)
如果用户已明确&#34;强制停止&#34;您的应用程序,它将不会收到任何广播,并且在用户明确再次打开它之前不会启动。
因此,预计您的BroadcastReceiver
在这种情况下不会收到活动。
以下是对类似问题的一个很好的答案:https://stackoverflow.com/a/41938584/3086818