Россия |
Использование контрактов и жизненный цикл приложения
Цель изучения
Материалы к модулю Вы можете скачать здесь.
В этом модуле вы узнаете, как описывать контракты в своих приложениях (например, контракт поиска(search)). Вы ознакомитесь с методикой обработки событий жизненного цикла приложений, чтобы пользователь мог эффективно переключаться между задачами.
Начало
Вам понадобится результат работы в предыдущем модуле, который находится в папке \Module_8_Assets\Starter
Контракты
Приложения описывают контракты, чтобы сообщить Windows о том, какую функциональность они поддерживают. Контракты также позволяют приложениям использовать функционал друг друга: например, приложение для обработки текста может воспользоваться контрактом общего доступа (Share Contract), чтобы передать какой-либо текст приложению для работы с электронной почтой.
Модель WinRT-приложений предоставляет интерфейс, позволяющий использовать такие стандартные функции, как Поиск, Общий доступ и Параметры. Эти функции представлены в виде чудо-кнопок на соответствующей панели.
Чтобы отобразить панель чудо-кнопок, необходимо выполнить одно из следующих действий: провести пальцем от правого края экрана на устройстве с сенсорным экраном, либо на клавиатуре нажать Win+C, либо переместить указатель мыши в правый нижний угол экрана.
Упражнение: использование чудо-кнопок
Рассмотрим как работает эта технология при передаче (sharing) веб-страницы по электронной почте с использованием Windows-приложений Internet Explorer и Mail (Почта).
- На начальном экране выберите плитку Internet Explorer.
- Введите адрес сайта, например, www.microsoft.com
- Вызовите панель чудо-кнопок, как было описано ранее (проведя от правого края экрана на устройстве с тач-скрином, либо нажав Winkey+C, либо переместив указатель мыши в правый нижний угол экрана).
- Из появившегося меню выберите Общий доступ (Share).
Обратите внимание, что адрес сайта показан во всплывающем меню Общий доступ, и кроме того, из появляющегося списка можно выбрать приложение, которое может обработать выбранные данные (в данном случае адрес сайта).
- Выберите приложение для работы с электронной почтой. Адрес из Inernet Explorer будет готов к отправке в новом электронном письме.
Контракты
Теперь, когда вы видели, как работают механизмы панели чудо-кнопок, можно рассмотреть, как ваши приложения могут взаимодействовать с этой панелью на основе использования контрактов. Контракт – декларация о намерениях – сообщает платформе Windows, что приложение обладает тем или иным функционалом.
Контракты и расширения в приложениях | |
---|---|
App to App Picking contract | Контракт передачи из приложения в приложение |
AutoPlay | Автозапуск |
Background tasks | Фоновые задачи |
Cached file updater | Контракт обновления кэшированных файлов |
Camera settings | Параметры камеры |
Contact picker | Окно выбора контактов |
File activation | Активация файла |
Game installer | Проводник игр |
Play To contract | Контракт "Воспроизведение на устройстве" |
Print task settings | Параметры задачи печати |
Protocol activation | Активация протокола |
Search contract | Контракт "Поиск" |
Settings contract | Контракт "Параметры" |
Share contract | Контракт "Общий доступ" |
Account Picture Provider | Поставщик аватаров |
SSL/certificates | SSL/сертификаты |
Чтобы узнать больше о контрактах и расширениях, посетите сайт
http://msdn.microsoft.com/en-us/library/windows/apps/hh464906.aspx
Рассмотрение всех поддерживаемых контрактов выходит за рамки данного курса, но стоит упомянуть о наиболее популярных и часто используемых контрактах.
Контракт "Поиск" (Search) позволяет с помощью кнопки поиска из панели чудо-кнопок, давать пользователю возможность осуществлять поиск по информации в вашем приложении (в этом модуле вы добавите контракт "Поиск" к приложению из примера).
Контракт "Параметры" (Settings) позволяет приложению вывести на экран свое окно настроек (предпочтений пользователя и т.д.) по нажатию на кнопку Параметры (Settings) в панели чудо-кнопок.
Контракт "Общий доступ" (Share) позволяет вашему приложению интегрироваться с дополнениями совместного использования. В результате ваше приложение может обмениваться данными (адресами сайтов, текстом и т.д.) с другими приложениями.
Упражнение: Объявление контрактов
Контракты объявляются в манифесте приложения. Чтобы их редактировать, можно использовать встроенный редактор Visual Studio.
- Откройте проект Starter в папке Module_8_Assets\Starter.
- Дважды кликните на файле манифеста этого приложения, который называется package.appxmanifest.
Пользовательский интерфейс приложений (Application UI) зависит от настроек значков, ориентации устройства в пространстве и Магазина Windows (Windows Store). Вы узнаете о Магазине Windows подробнее в девятом модуле.
Возможности ("Capabilities") имеют отношение к работе с сервисами системы и устройствами, о них вы можете узнать в "Работа с файлами" .
- Откройте вкладку Объявления (Declarations). Здесь вы указываете, какими контрактами будет пользоваться приложение.
Откройте выпадающее меню Доступные объявления. Появившийся список приведен ниже (он совпадает с таблицей, касающейся контрактов и расширений, рассмотренной выше):
- Выберите Поиск (Search) из списка и нажмите кнопку Добавить.
- В следующих упражнениях вы узнаете, как реализовать возможности поиска в коде. А сейчас сохраните манифест package.appxmanifest и закройте редактор манифеста.
Упражнение: контракт "Поиск" (Search)
В этом упражнении вы узнаете о реализации поискового контракта, который позволяет пользователям осуществлять поиск по содержимому приложения. Чтобы обеспечивать работу поискового контракта, нашему приложению надо реагировать на события, инициированные объектом SearchPane (Поисковая панель ).
- Откройте JavaScript-файл /js/default.js.
- Добавьте следующий код подписки на событие после вызова app.start(). В этом коде выполняются следующие действия: получение ссылки на поисковую панель (панель чудо-кнопок), добавление подписчиков на события вызова поискового списка и вызова поисковых подсказок.
Код доступен в файле \Module_8_Assets\snippets\initialize.txt
function initialize(args) { // reference the Search Pane object and register for handling search var searchPane = Windows.ApplicationModel.Search.SearchPane.getForCurrentView(); // add event listeners for query and suggestions searchPane.addEventListener("querysubmitted", handlingQuerySubmitted, false); searchPane.addEventListener("suggestionsrequested", handlingSuggestionRequest, false); }
- Добавьте код для вызова новой функции инициализации сразу же после комментария TODO в начале файла defult.js:
// TODO: This application has been newly launched. Initialize // your application here. initialize(args);
- Затем надо добавить код для обработчиков перечисленных событий. В данном случае воспользуетесь альтернативным методом запроса веб-ресурсов – вместо функции WinJS.xhr используем объект XmlHttpRequest. Код получится чуть более длинный, но вы получите больше возможностей для управления запросом и обработки ответа. В данном примере вы отправите запрос к сервису Wikipedia API, проверите значение ReadyState, которое сообщает об окончании выполнения запроса. Затем обработаете ответ, используя JSON.parse, и заполните список поисковых подсказок заголовками найденных изображений.
Код примера находится в файле \Module_8_Assets\snippets\queryhandlers.txt
function handlingQuerySubmitted(e) { // Get the latest Data depending on search string Data.groupSearch.title = e.queryText; Data.getBySearch(Data.groupSearch); // navigate back to start var nav = WinJS.Navigation; nav.navigate("/pages/groupeditems/groupedItems.html", null); } function handlingSuggestionRequest(e) { handleSuggestionRequest(e.queryText, e.request); } function handleSuggestionRequest(queryText, suggestionRequest) { var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (request.readyState === 4) { if (request.status >= 200 && request.status < 300) { if (request.responseText) { var results = JSON.parse(request.responseText); for (var i in results.query.allimages) { var item = results.query.allimages[i]; var title = item.title.replace('File:', '').toString(); if (title) { suggestionRequest.searchSuggestionCollection.appendQuerySuggestion(title); } } } } } }; request.open("GET", "http://en.wikipedia.org/w/api.php?action=query&list=allimages& format=json&aiprefix=" + queryText + "&ailimit=10", false); request.send();
- Так как вы обращаетесь к функциям getBySearch и groupSearch в пространстве имен Data, необходимо сделать эти функции доступными извне (public). Вставьте выделенные строки, как показано ниже в файл data.js.
WinJS.Namespace.define("Data", { items: groupedItems, groups: groupedItems.groups, getItemsFromGroup: getItemsFromGroup, getItemReference: getItemReference, resolveGroupReference: resolveGroupReference, resolveItemReference: resolveItemReference, addToMyImages: addToMyImages, getBySearch: getBySearch, groupSearch: groupSearch });
- Запустите приложение. Попробуйте использовать контракт поиска из правой части экрана или нажмите Winkey + C на клавиатуре. Теперь вам доступен поиск и выборка объектов для создания собственной поисковой группы.