コード例 #1
0
        // 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);
                    }
                }
            }
        }
コード例 #2
0
ファイル: MyService.cs プロジェクト: FSofTlpz/BatteryCheck
        /// <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();
            }
        }