Блог Сергея Байдачного

Мой блог о технологиях

Archive for 8 января, 2012

Контакты и календарь в Windows Phone 7.5

2 комментария

Продолжаю рассказывать про возможности интеграции приложений с Windows Phone 7.5. На этот раз поговорим о календаре и контактах, а именно, о чтении информации из списка контактов и календаря. Если Вы решили сохранить контакт, то тут можно использовать класс SaveContactTask, который позволит инициировать вызов стандартного приложения.

Итак, как я писал ранее, чтобы получить доступ к данным пользователя, необходимо явно запросить это разрешение либо в начале приложения, либо перед самим доступом к данным. При этом должен быть механизм, позволяющий пользователю запретить доступ. В дополнении к этому, манифест приложения должен декларировать следующие возможности: ID_CAP_CONTACTS – для контактов, ID_CAP_APPOINTMENTS – для календаря.

Прописав все возможности и получив доступ со стороны пользователя можно перейти к работе с контактами и календарем. Все необходимые классы содержаться в пространстве имен Microsoft.Phone.UserData. По большому счету тут два основных класса, это Contacts и Appointments. Именно с них начинается работа. Так, необходимо создать объекты необходимых классов, определить обработчики события SearchCompleted и запустить процедуру выбора контактов с помощью метода SearchAsync. С помощью последнего, запускается механизм поиска, заложенный внутри платформы, и разработчик получает доступ к результирующим данным.

Если говорить о параметрах метода SearchAsync, то в случае календаря, это параметры типа DateTime, которые задают промежуток времени, за который нужно выбрать записи. Третий параметр позволяет передать произвольный объект, который будет переброшен обработчику события SearchCompleted. Этот объект можно использовать на свое усмотрение, например, идентифицировать результат запроса по имени (если у Вас много запросов).

В случае контактов, метод SearchAsync также принимает три параметра. Третий параметр также представляет собой произвольный объект, а вот первый и второй – позволяют задать критерии поиска в списке контактов. Так, первый параметр задает строку для поиска (если она не нужна, то можно указать String.Empty), а второй – тип поиска. Тип поиска представляет собой объект перечислимого типа, принимающего одно из значений:

· None – возвращает все контакты;

· PinnedToStart – возвращает все контакты, привязанные к основному окну телефона;

· EmailAddresses – позволяет выполнять фильтрацию по Email адресам;

· PhoneNumber – позволяет выполнять фильтрацию по номерам телефонов;

· DisplayName – позволяет выполнять фильтрацию по имени контакта.

Естественно, что полученные результаты (в виде списка объектов Contact или Appointment) можно обрабатывать дополнительно, используя LINQ или простой перебор.

Таким образом, работа с контактами и календарем не представляет сложности. Вот пример кода, который может выбирать контакты и записи из календаря, задавая фильтры:

private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
    Microsoft.Phone.UserData.Contacts conts = 
         new Microsoft.Phone.UserData.Contacts();
    Appointments apps = new Appointments();

    conts.SearchCompleted += 
         new EventHandler<ContactsSearchEventArgs>(conts_SearchCompleted);
    conts.SearchAsync("B", FilterKind.DisplayName, "My Search 1");

    apps.SearchCompleted += 
         new EventHandler<AppointmentsSearchEventArgs>(apps_SearchCompleted);
    apps.SearchAsync(DateTime.Now, DateTime.Now.AddDays(7), "My Search 2");

}

void apps_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
{
    try
    {
        appsList.ItemsSource = e.Results;
    }
    catch
    {

    }
}

void conts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
    try
    {
        contsList.ItemsSource = e.Results;
    }
    catch
    {

    }
}

 

В заключении отмечу, что классы Contacts и Appointments имеют свойство Accounts, позволяющее определить доступные источники данных (напомню, что WP 7 может объединять данные из таких источников как Exchange, Facebook, Live и др). Выбирая конкретный контакт или запись в календаре, разработчик получает доступ к аналогичному свойству, позволяющему определить источник данных для конкретного контакта или записи в календаре (кстати, источников может быть несколько).

Written by Sergiy Baydachnyy

08.01.2012 at 10:40

Опубликовано в Windows Phone

Tagged with