Я пытаюсь запланировать еженедельное уведомление. Для определенного дня и времени повторяется еженедельно, но это не работает. Вот мой код для планирования будильника
var id = Convert.ToInt32(string.Format("{0}{1}{2}", task.Id, hour, minutes));
var intent = new Intent(context, typeof(AlarmReceiver));
intent.PutExtra(AndroidConstants.NotificationId, id);
intent.PutExtra(AndroidConstants.NotificationMessage, $"{context.Resources.GetString(Resource.String.general_push_reminder_body)} {task.Name}");
intent.PutExtra(AndroidConstants.NotificationTitle, context.Resources.GetString(Resource.String.general_push_reminder_title));
var pendingIntent = PendingIntent.GetBroadcast(context, id, intent, PendingIntentFlags.CancelCurrent);
Calendar calendar = Calendar.Instance;
calendar.Set(CalendarField.DayOfWeek, (int)day);
calendar.Set(CalendarField.HourOfDay, hour);
calendar.Set(CalendarField.Minute, minutes);
calendar.Set(CalendarField.Second, 0);
if (calendar.Before(Calendar.Instance))
{
Log.Info("Task", $"Adding 7 days as scheduled time is past");
calendar.Add(CalendarField.DayOfYear, 7);
}
var alarmManager = (AlarmManager)context.GetSystemService(Context.AlarmService);
alarmManager.SetRepeating(AlarmType.RtcWakeup, calendar.TimeInMillis, 7 * AlarmManager.IntervalDay, pendingIntent);
Вот мой приемник
[BroadcastReceiver(Enabled = true)]
public class AlarmReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
try
{
Log.Info("Task", $"Alarm manager received");
var title = intent.GetStringExtra(AndroidConstants.NotificationTitle);
var message = intent.GetStringExtra(AndroidConstants.NotificationMessage);
var id = intent.GetIntExtra(AndroidConstants.NotificationId, 0);
Log.Info("Task", $"Showing Notification with id {id} {title} and {message}");
NotificationHandler.ShowNotification(context, id, title, message);
}
catch (Exception ex)
{
Log.Error("Task", ex.ToString());
}
}
Нет исключений. Я перепробовал несколько вариантов, но AlarmReceiver
вообще не стреляет.
Если я выберу сегодняшний день и дам время после текущего времени, все равно if block for adding time for past
сработает и добавится еще 7 дней.