В этой статье я расскажу, как создать напоминание в Windows Phone. Я также углублюсь в некоторые другие аспекты функции напоминания в Windows Phone.
Давайте создадим простое напоминание. Я буду использовать таймер выбора, чтобы установить напоминание и активировать его. Timepicker доступен в Silverlight Windows Phone Toolkit
Загрузить Silverlight Windows Phone Toolkit
Шаг 1: Создайте Silverlight для проекта Windows Phone.
Шаг 2: Добавьте ссылку на Microsoft.Phone.Controls.Toolkit.dll
Шаг 3: Добавьте пространство имен Microsoft.Phone.Controls.Toolkit в MainPage.xaml.
xmlns:toolkit="clr- namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
Шаг 4: Добавьте элемент управления Timepicker в сетку MainPage.xaml. У него есть timePicker_ValueChanged, который сработает при изменении времени.
<toolkit:TimePicker Header="Start Time" x:Name="timePicker" Margin="0,250,0,0" Width="450" HorizontalAlignment="Left" ValueChanged="timePicker_ValueChanged"/>
Шаг 5: Добавьте директиву Microsoft.Phone.Scheduler.
using Microsoft.Phone.Scheduler;
Шаг 6: В коде MainPage.xaml добавьте метод timePicker_ValueChanged.
private void timePicker_ValueChanged(object sender, EventArgs args) { string reminderName = Guid.NewGuid().ToString(); Reminder reminder = new Reminder(reminderName); reminder.Title = "My Reminder"; DateTime date = DateTime.Today; DateTime beginTime = date + ((DateTime)timePicker.Value).TimeOfDay; reminder.BeginTime = beginTime; //reminder.ExpirationTime = date.AddHours(20); reminder.RecurrenceType = RecurrenceInterval.Daily; ScheduledActionService.Add(reminder); }
Мы можем использовать Guid для генерации случайного имени напоминания. Время начала напоминания можно установить с помощью DateTime.Today и значения, выбранного в таймере.
Мы можем установить RecurrenceType, используя перечисление RecurrenceInterval.
Варианты enum:
Нет = 0: повторений нет. Уведомление запускается один раз в указанное Microsoft.Phone.Scheduler.ScheduledAction.BeginTime время.
Ежедневно = 1: ежедневное повторение
Еженедельно = 2: еженедельное повторение
Ежемесячно = 3: ежемесячное повторение
EndOfMonth = 4: повторяется в конце каждого месяца
Ежегодно = 5: ежегодное повторение
Примечание. Если BeginTime превышен более чем на 4 часа, напоминание не будет запущено.
Шаг 7: Теперь оберните вышеуказанный код, который повторяется 50 раз, как показано ниже.
private void timePicker_ValueChanged(object sender, EventArgs args) { for (int i = 0; i < 50; i++) { string reminderName = Guid.NewGuid().ToString(); Reminder reminder = new Reminder(reminderName); reminder.Title = "My Reminder"; DateTime date = DateTime.Today; DateTime beginTime = date + ((DateTime)timePicker.Value).TimeOfDay; reminder.BeginTime = beginTime; //reminder.ExpirationTime = date.AddHours(20); reminder.RecurrenceType = RecurrenceInterval.Daily; ScheduledActionService.Add(reminder); } }
Шаг 8: Удалите это приложение с эмулятора или устройства, если вы уже его запустили. Теперь запустите программу снова с 50 циклами и установите напоминание. Это будет работать нормально. Теперь снова запустите эмулятор, и вы заметите, что InvalidOperationException не обрабатывается, как показано ниже.
Ошибка BNS: максимальное количество запланированных действий этого типа уже добавлено.
Шаг 9: Теперь удалите приложение с 50 циклами, увеличьте количество циклов до 51 и снова запустите приложение.
Вы получите ту же ошибку выше.
Итак, вывод заключается в том, что в Windows Phone существует ограничение в 50 активных напоминаний на приложение. После добавления напоминания в ScheduledActionService оно остается в приложении до тех пор, пока вы его не удалите.
Как указано выше, напоминание перестанет работать, как только вы достигнете порога 50.
Чтобы напоминание работало N раз, перед установкой нового напоминания необходимо удалить предыдущие напоминания из ScheduledAction.
Шаг 10: Добавьте директиву System.IO.IsolatedStorage.
using System.IO.IsolatedStorage;
Шаг 11: Сохраните имя напоминания в IsolatedStorage. Удалите имя напоминания из ScheduledActionSerive перед добавлением нового.
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; string strReminder; if (settings.TryGetValue<string>("Reminder", out strReminder)) { ScheduledActionService.Remove(strReminder); } string reminderName = Guid.NewGuid().ToString(); settings["Reminder"] = reminderName;
Теперь можно установить напоминание N раз.
На этом статья о напоминании в Windows Phone заканчивается.