Я пытаюсь запланировать автоматический запуск моего приложения каждый день в определенный час.У меня есть куча кода, который работает хорошо, пока моя деятельность выполняется (на переднем плане или в фоновом режиме), но она перестает работать, когда активность прекращается (с помощью диспетчера задач или принудительно уничтожается).Я много искал, но ничего не помогло.
Вот мой облегченный код:
[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);
}
Я попытался объявить свой приемник в манифесте, но ничего не изменил, и я прочитал, что Ксамарин сделает это сам.Кстати, у меня есть эта проблема во всех версиях Android (от 19 до 27), так что это не проблема оптимизации батареи.Я предполагаю, что это проблема трансляции, но я не могу заставить ее работать после смерти активности.
Заранее спасибо