Xamarin服务-根据时间表运行

问题描述 投票:0回答:1

我正在开发基于此示例的应用程序:https://github.com/xamarin/mobile-samples/tree/master/BackgroundLocationDemo

该示例可以正常工作,并且位置更新已按预期进行。但是,Android会不断显示该服务正在运行并耗尽电池的通知。现在,我所有的用户都有一个已定义的工作时间表(每天的开始到结束日期时间列表,例如8 am-1pm、4pm-8pm),我希望该服务仅在这些工作时间之间运行。这意味着无论何时时间表显示用户正在工作,我都需要启动/停止服务。

我之前曾问过这个问题,但想知道是否有人想出一种有效而可靠的方法来实现按时间表运行的这种类型的服务?

android xamarin schedule background-service foreground-service
1个回答
0
投票

您可以使用AlarmManager在特定时间执行任务。

例如,我希望我的任务每天上午10:51运行,我可以使用以下代码来执行它。

 public static void startAlarmBroadcastReceiver(Context context)
        {
            Intent _intent = new Intent(context, typeof( AlarmBroadcastReceiver));
            PendingIntent pendingIntent = PendingIntent.GetBroadcast(context, 0, _intent, 0);
            AlarmManager alarmManager = (AlarmManager)context.GetSystemService(Context.AlarmService);
            // Remove any previous pending intent.
            alarmManager.Cancel(pendingIntent);

            Calendar cal = Calendar.Instance;
            cal.Set( CalendarField.HourOfDay, 10);
            cal.Set(CalendarField.Minute, 51);
            cal.Set(CalendarField.Second, 0);

            alarmManager.SetRepeating(AlarmType.RtcWakeup, cal.TimeInMillis, AlarmManager.IntervalDay, pendingIntent);


       }

这里是关于AlarmBroadcastReceiver的代码。

    [BroadcastReceiver(Enabled = true, Exported = false)]
    public class AlarmBroadcastReceiver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            Toast.MakeText(context, "Received intent!", ToastLength.Short).Show();
        }
    }

不要忘记添加以下权限。

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

这里正在运行gif。enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.