Упражнение 1. Сопоставление файлов и протоколовВ этом упражнении мы научимся реализовывать возможность запуска приложения ContosoCookbook с помощью сопоставления имен схем URI. Оно состоит из трех заданий: регистрация имени схемы URI, настройка сопоставления URI и тестирование приложения. Задание 1. Настройка сопоставлений имен схем URI Каждое приложение, использующее сопоставления URI, объявляет имя схемы URI, которое оно может обработать. Приложение ContosoCookbook отображает рецепты и, следовательно, обрабатывает имя схемы URI «recipe». Для обработки имени схемы URI приложение ContosoCookbook использует схему URI «recipe://».
Данный код регистрирует приложение ContosoCookbook в качестве обработчика имени схемы URI «recipe». Примечание. Элемент Extensions нужно добавить после элемента Tokens. Примечание. Приложение не может зарегистрировать произвольное имя схемы URI; некоторые сопоставления файлов и имен схем URI зарезервированы. Если приложение регистрирует зарезервированное сопоставление, то регистрация игнорируется. Полный список зарезервированных имен схем URI доступен в документации MSDN. Задание 2. Настройка сопоставления URI В предыдущем задании мы настроили приложение для обработки запросов на запуск с использованием схемы URI «recipe://». В процессе выполнения приложение должно обрабатывать любой запуск URI и проверять, использует ли URI соответствующую схему URI. Если приложение не может обработать URI, то оставляет его неизменным. Запросы перенаправляются на внутреннюю страницу, отображающую подробные сведения о рецепте.
5. Новый класс будет зарегистрирован в качестве средства сопоставления URI для приложения; это означает, что он наследуется от базового класса UriMapperBase. 6. Добавьте элементы данных, которые впоследствии будут использоваться методами класса: Данный код сохраняет сделанный снимок в коллекции пользовательских изображений, которая расположена в папке изолированного хранилища приложения. 5. И напоследок мы добавим код для получения снимка. В упражнении 2 мы создали пустой обработчик событий для кнопки Take Picture (Сделать снимок) на панели приложения ApplicationBar. Найдите метод btnTakePicture_Click и добавьте в него следующий код: 6. Добавьте элементы данных, которые впоследствии будут использоваться методами класса: 7. UriMapperBase — это абстрактный класс, содержащий единственный абстрактный метод MapUri, который должен быть переопределен производными классами. Переопределите этот метод, добавив следующий код: Предыдущий фрагмент кода содержит два сценария для обработки запрошенного URI:
Примечание. Приложение ContosoCookbook использует классический формат URI для передачи параметров, схожий с форматом URL-адресов, который поддерживается веб-браузерами: ?{параметр}={значение}&{параметр}={значение}. В приложении можно использовать подход, отличный от кодирования: с помощью пар «имя–значение».
8. Добавьте следующий вспомогательный метод для сопоставления URI. Этот частный метод обеспечивает возможность сопоставления для приложения ContosoCookbook. Предыдущий метод обеспечивает соответствие URI шаблону, который может быть распознан приложением, и извлекает из него операцию с рецептом и параметры идентификатора группы. Затем метод возвращает новый URI, который перенаправляет приложение на внутреннюю страницу (RecipeDetailsPage.xaml) с указанными параметрами. 9. Реализации средства сопоставления URI не достаточно; следует отправить системе инструкцию о необходимости использовать данное средство сопоставления URI в составе приложения.Чтобы зарегистрировать средство сопоставления URI, откройте файл App.xaml.cs, найдите метод InitializePhoneApplication и добавьте следующий код между строкой, выполняющей регистрацию события RootFrame.Navigated, и строкой, выполняющей регистрацию события RootFrame.NavigationFailed:
10. Наконец, нужно инициализировать данное приложение на случай, если оно запускается посредством сопоставления имен схем URI. Откройте файл RecipeDetailPage.xaml.cs и найдите метод OnNavigatedTo. Измените подпись метода, добавив ключевое слово async:
protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
11. Вставьте следующий код перед вызовом метода NavigateToRecipe(UniqueId): Это позволяет загрузить данные рецепта, если приложение запускается посредством сопоставления имен схем URI. Убедившись, что инициализация выполнена, приложение продолжает работать как обычно, вызвав методNavigateToRecipe(UniqueId). Примечание. В предыдущем фрагменте кода использовано два новых ключевых слова C# 5.0 — async и await. Описание указанных языковых функций, имеющих важнейшее значение для реализации асинхронных приложений в C#, не входит в круг тем этого практического занятия. Дополнительные сведения о C# 5.0, новых ключевых словах этого языка и асинхронном программировании в целом см. в статье 12. Приложение объявлено как обработчик имен схем URI рецепта и готово к тестированию; мы сделаем это в следующем задании. Задание 3. Тестирование приложения После настройки кода для обработки запросов на сопоставление имен схем URI мы смоделируем эти запросы извне. Существует три способа моделирования запросов на запуск:
Примечание. Поскольку этот метод является достаточно продвинутым и требует сложной настройки (включая размещение компонентов в Интернете), мы не будем подробно рассматривать его на этом практическом занятии. С помощью первого подхода можно моделировать запросы, меняя код навигации, заданный по умолчанию, в манифесте приложения (файл WMAppManifest.xml).
3. Запустите приложение. Должна отобразиться следующая страница. Рис. 5. Используя указанный подход, мы изменили конфигурацию запуска приложения. Теперь система настроена так, что запуск приложения происходит посредством отправки запроса протокола в средство сопоставления URI. Однако мы не протестировали сопоставление имен схем URI приложения на системном уровне. Это будет сделано с помощью других методов тестирования. Примечание. Не забудьте отменить изменения, сделанные в узле DefaultTask. Вторая методика тестирования позволяет смоделировать запросы на запуск путем создания дополнительного приложения Windows Phone 8:
5. Запустите новое приложение, а затем нажмите кнопку. Должно запуститься приложение ContosoCookbook и отобразиться страница с рецептом из рисунка 3. Используя указанный подход, мы убедились, что приложение зарегистрировано в качестве обработчика имени схемы URI «recipe» на уровне ОС. Теперь именно операционная система запускает приложение, когда имя схемы URI вызывается из другого приложения. Примечание. Если с одним именем схемы URI связано несколько приложений, откроется следующее диалоговое окно, предлагая пользователю выбрать нужное приложение. Рис. 6. 6. Это действие завершает упражнение. |