// Neustart nach Reboot /// <summary> /// Falls die App die Berechtigung RECEIVE_BOOT_COMPLETED hat, wird hier (auch) Intent.ActionBootCompleted gemeldet /// und der Service wird gestartet. /// </summary> /// <param name="context"></param> /// <param name="intent"></param> public override void OnReceive(Context context, Intent intent) { if (intent.Action == Intent.ActionBootCompleted) { if (ServiceCtrl.GetServiceIsActive(context)) { Intent it = new Intent(context, Java.Lang.Class.FromType(typeof(MyService))); ComponentName componentName; if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O) { componentName = context.StartForegroundService(it); } else { componentName = context.StartService(it); } } } }
/// <summary> /// Die Konfigurationsdaten und/oder die akt. Batteriedaten haben sich geändert. /// </summary> public static void OnUpdateData() { if (ServiceCtrl.GetServiceIsActive(null)) { double chargelevel = Xamarin.Essentials.Battery.ChargeLevel; if (chargelevel >= 0) { updateInfoNotification(chargelevel); /* * Fälle: * * level Aufladung * <= min nein -> MinAlarm * <= min ja -> alle Alarme löschen / Timer stop * min<level<max nein -> alle Alarme löschen / Timer stop * min<level<max ja -> alle Alarme löschen / Timer stop * max <= nein -> alle Alarme löschen / Timer stop * max <= ja -> MaxAlarm */ bool ischarging = Xamarin.Essentials.Battery.State == Xamarin.Essentials.BatteryState.Charging || (ServiceCtrl.AlarmFor100Percent && // Alarm auch bei 100% und Verbindung zum Stromnetz o.ä. Xamarin.Essentials.Battery.PowerSource != Xamarin.Essentials.BatteryPowerSource.Battery && chargelevel == 1); bool needminalarm = !ischarging && chargelevel * 100 <= ServiceCtrl.MinPercent; bool needmaxalarm = ischarging && ServiceCtrl.MaxPercent <= chargelevel * 100; if ((needminalarm && !ischarging) || (needmaxalarm && ischarging)) // Alarm-Timer ist nötig { if (!timerIsRunning) { timerStopAndRemoveNotifications(); } if (!timerIsRunning) { if (needminalarm) { startTimer(ServiceCtrl.MinAlarmPeriod * 1000); } else if (needmaxalarm) { startTimer(ServiceCtrl.MaxAlarmPeriod * 1000); } } else { if (needminalarm && actualtimerperiod != ServiceCtrl.MinAlarmPeriod * 1000) // Timer neu setzen { startTimer(ServiceCtrl.MinAlarmPeriod * 1000); } else if (needmaxalarm && actualtimerperiod != ServiceCtrl.MaxAlarmPeriod * 1000) // Timer neu setzen { startTimer(ServiceCtrl.MaxAlarmPeriod * 1000); } } } else { timerStopAndRemoveNotifications(); } } } else { timerStopAndRemoveNotifications(); } }