Опубликован: 26.12.2012 | Доступ: свободный | Студентов: 734 / 35 | Длительность: 06:22:00
Специальности: Программист
Лекция 8:

Использование контрактов и жизненный цикл приложения

< Лекция 7 || Лекция 8: 12 || Лекция 9 >
Аннотация: WinRT-риложения могут интергироваться с панелью чудо-кнопок, чтобы предоставлять возможности поиска, настройки параметров, общего доступа к информации на основе контрактов. Контракты также позволяют приложениям объявить о дополнительных возможностях: печать, изменение настроек камеры, фоновые задачи.

Цель изучения

Материалы к модулю Вы можете скачать здесь.

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

Начало

Вам понадобится результат работы в предыдущем модуле, который находится в папке \Module_8_Assets\Starter

Контракты

Приложения описывают контракты, чтобы сообщить Windows о том, какую функциональность они поддерживают. Контракты также позволяют приложениям использовать функционал друг друга: например, приложение для обработки текста может воспользоваться контрактом общего доступа (Share Contract), чтобы передать какой-либо текст приложению для работы с электронной почтой.

Модель WinRT-приложений предоставляет интерфейс, позволяющий использовать такие стандартные функции, как Поиск, Общий доступ и Параметры. Эти функции представлены в виде чудо-кнопок на соответствующей панели.

Чтобы отобразить панель чудо-кнопок, необходимо выполнить одно из следующих действий: провести пальцем от правого края экрана на устройстве с сенсорным экраном, либо на клавиатуре нажать Win+C, либо переместить указатель мыши в правый нижний угол экрана.

Упражнение: использование чудо-кнопок

Рассмотрим как работает эта технология при передаче (sharing) веб-страницы по электронной почте с использованием Windows-приложений Internet Explorer и Mail (Почта).

  1. На начальном экране выберите плитку Internet Explorer.
  2. Введите адрес сайта, например, www.microsoft.com
  3. Вызовите панель чудо-кнопок, как было описано ранее (проведя от правого края экрана на устройстве с тач-скрином, либо нажав Winkey+C, либо переместив указатель мыши в правый нижний угол экрана).
  4. Из появившегося меню выберите Общий доступ (Share).

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

  5. Выберите приложение для работы с электронной почтой. Адрес из 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.

  1. Откройте проект Starter в папке Module_8_Assets\Starter.
  2. Дважды кликните на файле манифеста этого приложения, который называется package.appxmanifest.

    Пользовательский интерфейс приложений (Application UI) зависит от настроек значков, ориентации устройства в пространстве и Магазина Windows (Windows Store). Вы узнаете о Магазине Windows подробнее в девятом модуле.

    Возможности ("Capabilities") имеют отношение к работе с сервисами системы и устройствами, о них вы можете узнать в "Работа с файлами" .

  3. Откройте вкладку Объявления (Declarations). Здесь вы указываете, какими контрактами будет пользоваться приложение.

    Откройте выпадающее меню Доступные объявления. Появившийся список приведен ниже (он совпадает с таблицей, касающейся контрактов и расширений, рассмотренной выше):

    Список доступных объявлений на вкладке Объявления в редакторе манифеста

    Список доступных объявлений на вкладке Объявления в редакторе манифеста
  4. Выберите Поиск (Search) из списка и нажмите кнопку Добавить.
  5. В следующих упражнениях вы узнаете, как реализовать возможности поиска в коде. А сейчас сохраните манифест package.appxmanifest и закройте редактор манифеста.

Упражнение: контракт "Поиск" (Search)

В этом упражнении вы узнаете о реализации поискового контракта, который позволяет пользователям осуществлять поиск по содержимому приложения. Чтобы обеспечивать работу поискового контракта, нашему приложению надо реагировать на события, инициированные объектом SearchPane (Поисковая панель ).

  1. Откройте JavaScript-файл /js/default.js.
  2. Добавьте следующий код подписки на событие после вызова 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);
    }
    
  3. Добавьте код для вызова новой функции инициализации сразу же после комментария TODO в начале файла defult.js:
    // TODO: This application has been newly launched. Initialize
    // your application here.
    initialize(args);
    
  4. Затем надо добавить код для обработчиков перечисленных событий. В данном случае воспользуетесь альтернативным методом запроса веб-ресурсов – вместо функции 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();
    
    
  5. Так как вы обращаетесь к функциям 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    
    
    });
    
  6. Запустите приложение. Попробуйте использовать контракт поиска из правой части экрана или нажмите Winkey + C на клавиатуре. Теперь вам доступен поиск и выборка объектов для создания собственной поисковой группы.
< Лекция 7 || Лекция 8: 12 || Лекция 9 >