Эта статья является Днем № 3 в серии под названием « 31 Дней Манго» .
Сегодня мы собираемся обсудить, как мы можем установить сигналы тревоги и напоминания на телефоне пользователя. Этими напоминаниями может полностью управлять наше приложение, что означает, что мы можем создавать, редактировать и удалять их по мере необходимости.
Как работают напоминания
Напоминания о Windows Phone — это способ предупредить пользователя о том, что нужно что-то сделать. Очевидное применение напоминания — будильник, календарь или список дел. Тем не менее, напоминания могут быть использованы для различных приложений, и даже являются удобным инструментом для напоминания вашему пользователю о необходимости вернуться в свое приложение. Вот пример напоминания, которое вы можете запустить на телефоне вашего пользователя:
Как создать напоминание
Создать напоминание относительно просто. Вы создаете новый объект Reminder, привязываете свойства, которые важны для вас, а затем добавляете его в ScheduledActionService, который работает на телефоне вашего пользователя. Ниже приведен исходный код полностью функционального напоминания (тот, что на скриншоте выше). После кода я подробно расскажу о каждой части. Обратите внимание, что в верхней части моей страницы я добавил дополнительный оператор использования: Microsoft.Phone.Scheduler.
using System; using Microsoft.Phone.Controls; using Microsoft.Phone.Scheduler; namespace Day3_Reminders { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); Reminder r = new Reminder("testreminder"); r.Title = "A Special Reminder"; r.Content = "Jeff Blankenburg's Reminder"; r.NavigationUri = new Uri("/ReminderPage.xaml", UriKind.Relative); r.BeginTime = DateTime.Now.AddSeconds(15); r.ExpirationTime = DateTime.Now.AddDays(7); r.RecurrenceType = RecurrenceInterval.Daily; ScheduledActionService.Add(r); } } }
Называя Ваше Напоминание
В первой строке кода напоминания необходимо указать имя напоминания. В приведенном выше примере мы назвали наш «testreminder». Каждое напоминание (и будильник, который мы рассмотрим позже) должно иметь имя, и мы будем использовать это имя для управления нашими событиями в будущем. Каждое напоминание / будильник должно иметь уникальное имя, так что имейте это в виду при создании приложения. Если имя не имеет значения для вас, или вы не планируете управлять этими событиями, вы можете использовать простую временную метку в качестве имени, которая каждый раз должна гарантировать уникальное имя.
Название приложения, название и содержание
Эти два текстовых значения представляют сообщения, которые вы увидите в поле, которое появляется на экране пользователя. На изображении ниже я пометил каждое из значений текста, чтобы вы точно знали, как будет выглядеть ваш текст.
Как видите, мы не можем контролировать отображение текста, но у нас достаточно места для его написания. Если пользователь касается какой-либо части этих текстовых значений, у нас есть возможность вернуть их обратно в наше приложение, используя свойство NavigationUri.
NavigationUri
NavigationUri — это относительный путь к странице вашего приложения. В приведенном выше примере кода мы отправляем пользователя в ReminderPage.xaml. Эта концепция называется «глубокая связь», и вы увидите, что она используется во многих новых API, доступных нам в Windows Phone 7.5. Возможность запуска приложения на определенной странице окажется невероятно полезной как для вас, так и для ваших пользователей, и использование этой возможности настоятельно рекомендуется.
BeginTime, ExpirationTime и RecurrenceType
BeginTime, очевидно, является очень важным значением, поскольку оно определяет, когда наше напоминание будет запущено на устройстве пользователя. Он принимает значение DateTime, как и ExpirationTime. Значение ExpirationTime не является обязательным, но становится более актуальным и полезным, когда мы добавляем концепцию повторения в наши напоминания. Возможно, вы создаете приложение, которое напоминает вашему пользователю о необходимости проверять уровень сахара в крови в 13:00 каждый день, но вы хотите делать это только в течение одной недели. Вы можете установить ExpirationTme равным одной неделе от первоначального напоминания и установить RecurrenceType = RecurrenceInterval.Daily. Это будет отправлять одно и то же напоминание пользователю в одно и то же время каждый день. Для нескольких напоминаний в день вы можете создавать несколько разных напоминаний одновременно. В конечном итоге это приведет вас к следующей задаче: управлению всеми различными напоминаниями на устройстве.
Управление существующими напоминаниями
Создание одного напоминания — простая задача. Однако управление множеством напоминаний и сигналов тревоги может быть довольно сложным. Если вы использовали приведенный выше пример кода в своем собственном проекте, вы, скорее всего, столкнулись с InvalidOperationException, который сообщает вам, что напоминание с таким именем уже существует. Вот почему при создании напоминания на телефоне вашего пользователя важно проверить и убедиться, что вы еще не создали его для них. Для этого мы можем найти существующее имя напоминания и удалить его, если оно существует. Следующий код точно такой же, как мой предыдущий пример, за исключением того, что я проверяю, существует ли уже напоминание с таким именем, и удаляю его.
if (ScheduledActionService.Find("testreminder") != null) { Reminder r = ScheduledActionService.Find("testreminder") as Reminder; r.Title = "This has been edited."; r.Content = "This is updated content."; r.BeginTime = DateTime.Now.AddSeconds(15); ScheduledActionService.Replace(r); }
Эта способность находить конкретные напоминания и сигналы тревоги становится очень полезной, когда вам нужно отредактировать или изменить созданное напоминание. Чтобы редактировать напоминание, вам просто нужно использовать метод Find () для создания новой ссылки на него и метод Replace () для его сохранения, как в примере ниже:
if (ScheduledActionService.Find("testreminder") != null) { Reminder r = ScheduledActionService.Find("testreminder") as Reminder; r.Title = "This has been edited."; r.Content = "This is updated content."; r.BeginTime = DateTime.Now.AddSeconds(15); ScheduledActionService.Replace(r); }
Как создать будильник
Аварийные сигналы почти идентичны напоминаниям, с несколькими исключениями. Во-первых, Alarms не может указать свойство Title, и они также не могут использовать свойство NavigationUri. Однако они могут воспроизводить собственный звук, чего не могут делать напоминания. В остальном, Тревоги и Напоминания идентичны. Мы управляем ими одинаково (используя ScheduledActionService), что позволяет нам добавлять, редактировать и удалять их по мере необходимости. Вот пример кода для создания Alarm, используя уроки, которые мы уже изучили о напоминаниях:
if (ScheduledActionService.Find("testalarm") != null) ScheduledActionService.Remove("testalarm"); Alarm a = new Alarm("testalarm"); a.Content = "Jeff Blankenburg's Alarm"; a.Sound = new Uri("button-8.mp3", UriKind.Relative); a.BeginTime = DateTime.Now.AddSeconds(15); a.ExpirationTime = DateTime.Now.AddDays(7); a.RecurrenceType = RecurrenceInterval.Daily; ScheduledActionService.Add(a);
Как видите, даже синтаксис идентичен напоминанию. Для свойства Sound я ссылаюсь на файл MP3, который я включил в свой проект. День № 20 из моей серии « 31 день Silverlight » рассказывает, как именно включить аудиофайл в проект и даже как его вызвать из событий щелчка. Обязательно прочитайте это, если вам нужна дополнительная информация по этому вопросу.
Резюме
В заключение, Напоминания и Сигналы тревоги — отличный способ уведомить вашего пользователя, что пришло время что-то сделать. Хотя они очень похожи, важно помнить, что напоминания позволяют вам предоставить ссылку обратно в ваше приложение, даже на определенную страницу, если вам это нужно. Это важный и эффективный способ вернуть вашего пользователя в ваше приложение, и он значительно упрощает поиск того, что ему нужно.
Чтобы увидеть готовое работающее приложение, которое использует весь код и концепции из этой статьи, нажмите на изображение «Скачать код» ниже.
Завтра я собираюсь пройти через недавно доступный датчик в телефонах Windows: Компас. Я даже покажу, как магниты могут сильно на это повлиять. Увидимся позже!
Источник: http://www.jeffblankenburg.com/2011/11/03/31-days-of-mango-day-3-alarms-and-reminders/