Опубликован: 15.05.2013 | Доступ: свободный | Студентов: 265 / 9 | Длительность: 24:25:00
Специальности: Системный архитектор
Лекция 3:

Объявления в манифесте

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

Контакты

Последний контракт, который мы рассмотрим в этой лекции (ух ты!), это средство выбора контактов. Мы еще не видели этого средства в действии в Windows 8. Поэтому посмотрим на него для начала, а потом разберемся, как это средство используется с одной стороны контракта, и как приложение-поставщик удовлетворяет нужды другой стороны.

Контакт, или контактные сведения, как вы, вероятно, ожидаете, это информация о человеке, которая включает в себя подробности наподобие имени, номера телефона, адреса электронной почты и так далее. Очевидное место, где вам понадобится контакт – это составление электронного письма, как показано на рис. 3.8. Здесь, при прикосновении к элементу управления "+" в правой части полей To (Кому) и Cc (Копия), будет открыто средство выбора контактов, которое по умолчанию относится к приложению Peoples (Люди) Windows 8, как показано на рис. 3.9. (экран-заставка), и на рис. 3.10 (вид в режиме множественного выбора, где я размыл сведения о моих друзьях, и они не станут обвинять меня за привлечение к ним нежелательного внимания!). Как мы видели с интерфейсом средства выбора файлов, приложение-поставщик поддерживает пользовательский интерфейс для центральной части экрана, в то время как Windows поддерживает верхнюю и нижнюю части, заголовок и элемент меню в виде стрелки, направленной вниз, используя информацию из манифеста приложения-поставщика (обратиесь к рис. 3.3). На рис. 3.11. вы можете видеть внешний вид приложения из примера "Приложение для выбора контактов" (http://code.msdn.microsoft.com/windowsapps/Contact-Picker-App-sample-fc6677a1 ) в режиме поставщика, так же как и меню, которое позволяет вам выбирать разных поставщиков (те приложения, которые объявили себя в качестве поставщиков контактов)

Когда я выбираю один или большее количество контактов в любом приложении-поставщике и нажимаю на кнопку Select (Выбрать) в нижней части экрана, эти контакты поступают в первое приложение, в данном случае это Mail (Почта).

Так же, как контракт средства выбора файлов позволяет перемещаться по данным, представленным в виде файлов другим приложением, контракт контактов (скажите это быстро раз десять!) позволяет пользователю просто перемещаться по сведениям о людях, которые вы можете выбирать из любого другого источника.

Приложение Mail (Почта) использует средство выбора контактов для выбора получателей

Рис. 3.8. Приложение Mail (Почта) использует средство выбора контактов для выбора получателей
Приложение Peoples (Люди), запускающееся в качестве поставщика контактов

Рис. 3.9. Приложение Peoples (Люди), запускающееся в качестве поставщика контактов
Пользовательский интерфейс выбора внутри приложения Peoples (Люди), показанный при множественном выделении (сведения о моих друзьях здесь размыты, так как они обычно не ищут славы среди разработчиков). Выделенные объекты собраны в нижней части, в корзине элементов

Рис. 3.10. Пользовательский интерфейс выбора внутри приложения Peoples (Люди), показанный при множественном выделении (сведения о моих друзьях здесь размыты, так как они обычно не ищут славы среди разработчиков). Выделенные объекты собраны в нижней части, в корзине элементов
 Пользовательский интерфейс примера выбора контактов, когда приложение используется в качестве поставщика, вместе со всплывающим меню в заголовке, которое позволяет выбирать поставщика

Рис. 3.11. Пользовательский интерфейс примера выбора контактов, когда приложение используется в качестве поставщика, вместе со всплывающим меню в заголовке, которое позволяет выбирать поставщика

Использование средства выбора контактов

Контакты, в целом, используют API в пространстве имен Windows.ApplicationModel.Contacts. Приложение, принимающее контакты, воспринимает каждый из них представленным в виде экземпляра класса ContactInformation (http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.contacts.contactinformation.aspx ), свойства которого, такие как name, phoneNumbers, locations, emails, instantMessages, и customFields, вместе с методами getThumbnailAsync и queryCustomFields, предоставляют вам контактную информацию. Выбор контакта осуществляется через интерфейс средства выбора контактов, который очень похож на интерфейс средства выбора файла. Интерфейс запускается с помощью Windows.ApplicationModel.Contacts.ContactPicker (http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.contacts.contactpicker.aspx ). После создания экземпляра данного объекта, вы можете установить подпись commitButtonText для первой (левой) кнопки в интерфейсе (как "Select" (Выбор) на предыдущих рисунках). Так же вы можете установить свойство selectionMode в одно из значений перечисления ContactSelectionMode: либо в contact (по умолчанию) либо в fields. В первом случае, возвращается полная контактная информация, в последнем, средство выбора работает с содежимым свойства desiredFields ( http://msdn.microsoft.com/library/windows/apps/windows.applicationmodel.contacts.contactpicker.desiredfields.aspx). Обратитесь к документации по данному свойству для того, чтобы узнать подробности.

Когда вы готовы к показу интерфейса, вызовите метод средства выбора контактов pickSingleContactAsync или pickMultipleContactsAsync. Они предоставляют вам обработчик завершения для одного объекта ContactInformation или для вектора из них, соответственно. Как и в случае со средством выбора файлов, обратите внимание на то, что эти API выдают исключения, если вызываются, когда приложение находится в прикрепленном режиме просмотра, очевидно, вы постараетесь избежать подобной ситуации.

Выбор и отображение отдельного контакта показан в Сценарии 1 примера "Приложение для выбора контактов" ( http://code.msdn.microsoft.com/windowsapps/Contact-Picker-App-sample-fc6677a1):

var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
picker.commitButtonText = "Select";

// Открывает для пользователя средство выбор контакта
picker.pickSingleContactAsync().done(function (contact) {
if (contact !== null) {
// Получает информацию о контакте...
}
});
      

Выбор нескольких контактов (Сценарий 2, js/scenarioMultiple.js) работает похожим образом, лишь использует pickMultipleContactsAsync. В любом случае, вызывающее приложение затем применяет данные ContactInformation так, как ему нужно, например, заполняет поля To (Кому) и Cc (Копия) в приложении Mail (Почта). Однако, свойства этого объекта, помимо name, которое является обычной строкой, обладают некоторой структурой, как показано в следующей таблице.

Свойство Тип Свойства и типы полей
emails phoneNumbers Вектор ContactField category (ContactFieldCategory), name (строка), type (типа ContactFieldType), value (строка)
instantMessages Вектор ContactInstantMessageField То же самое, что и ContactField выше, плюс - displayText, launchUri,service, и userName (все имеют строковой тип)
locations Вектор ContactLocationField То же, что и ContactField выше, плюс city, country, postalCode, region, street, и unstructuredAddress (все имеют строковой тип)

Таким образом, пример принимает объект ContactInformation следующим образом, сначала извлекая индивидуальные свойства вектора:

appendFields("Emails:", contact.emails, contactElement);
appendFields("Phone Numbers:", contact.phoneNumbers, contactElement);
appendFields("Addresses:", contact.locations, contactElement);
      

И затем перечисляя содержимое этих векторов и в этом случае создавая элементы с их содержимым. Другие приложения, конечно, будут перемещать значения в подходящие поля или в другие части интерфейса приложения, то, что показано здесь, демонстрирует обработку различных категорий:

function appendFields(title, fields, container) {
// Создаёт интерфейс для списка полей контактатого же типа, например, для
// адресов электронной почты или телефонов
fields.forEach(function (field) {
if (field.value) {
// Присоединяет title только если имеется не пустое поле контакта
if (title) {
container.appendChild(createTextElement("h4", title));
title = "";
}

// Отображает категорию около значения поля
switch (field.category) {
case Windows.ApplicationModel.Contacts.ContactFieldCategory.home:
container.appendChild(createTextElement("div", field.value + " (home)"));
break;
case Windows.ApplicationModel.Contacts.ContactFieldCategory.work:
container.appendChild(createTextElement("div", field.value + " (work)"));
break;
case Windows.ApplicationModel.Contacts.ContactFieldCategory.mobile:
container.appendChild(createTextElement("div", field.value + " (mobile)"));
break;
case Windows.ApplicationModel.Contacts.ContactFieldCategory.other:
container.appendChild(createTextElement("div", field.value + " (other)"));
break;
case Windows.ApplicationModel.Contacts.ContactFieldCategory.none:
default:
container.appendChild(createTextElement("div", field.value));
break;
}
}
});
}
      
< Лекция 2 || Лекция 3: 12345 || Лекция 4 >