Упражнение 2. Сопоставление файлов и протоколовВ этом упражнении мы расскажем о том, как запускать ваше приложение для открытия файла, если этот процесс инициирован другим приложением. Данная функция называется сопоставлением файлов: приложение объявляет расширение файла для обработки, и на основе указанного сопоставления ОС перенаправляет запрос в приложение. Задание 1. Регистрация сопоставлений файлов Аналогично предыдущему упражнению, необходимо объявить поддерживаемое расширение файла. На этом практическом занятии мы сопоставим приложение ContosoCookbook с расширениями файлов .recipe и .rcp. Сначала, и это самое главное, необходимо соответствующим образом изменить манифест приложения.
Примечание. В Windows Phone 8 можно открывать файлы из разных местоположений. Если приложение должно открывать файлы из внешнего хранилища (например, с карты SD), необходимо зарегистрировать тип содержимого (ContentType) и сопоставить его с типом файлов (FileType), например: Корневой элемент новой конфигурации — сопоставление типа файла FileTypeAssociation, оно должно быть прямым дочерним элементом элемента Extensions (здесь не показано). Этот элемент содержит сопоставления типов файлов приложения. В элементе SupportedFileTypes можно объявить до 20 расширений файлов и назначить элемент FileType для каждого расширения. Элемент FileTypeAssociation описывает набор файловых расширений с одним типом содержимого и значком логотипа. Кроме того, манифест можно использовать для объявления логотипов типов файлов, хотя это и не обязательно. Чтобы задать изображения логотипов, добавьте объявления для трех размеров логотипов:
Примечание. Подобно схемам URI, некоторые файловые расширения резервируются и сопоставляются операционной системой и встроенными приложениями. Полный список зарезервированных файловых расширений приведен в документации MSDN. Задание 2. Настройка средства сопоставления URI для сопоставлений файлов В этом задании мы настроим средство сопоставления URI так, чтобы оно идентифицировало запрос на сопоставление файлов и перенаправляло этот запрос на соответствующую страницу приложения ContosoCookbook. Кроме того, мы добавим фрагмент кода, считывающий содержимое файла и отображающий нужный рецепт.
Этот шаблон определяет, является ли URI запросом на сопоставление типов файлов. 3. Найдите метод MapUri и добавьте следующий код после оператора «tempUri = uri.ToString()»:Код проверяет, представляет ли данный URI запрос на сопоставление файлов, и вызывает метод GetFileMappedUri для перенаправления на соответствующую страницу приложения. 4. Добавьте метод GetFileMappedUri в класс следующим образом:Этот код перенаправляет запрос на страницу RecipeDetailPage.xaml, которая считывает содержимое файла и отображает рецепт. 5. Откройте файл RecipeDetailPage.xaml.cs и добавьте в начало файла следующие операторы using:6. Затем найдите метод OnNavigatedTo: он вызывается, поскольку UriMapper перенаправил запрос на эту страницу. Замените оператор «string UniqueId = NavigationContext.QueryString["ID"];» следующим кодом: В этом коде используется класс SharedStorageAccessManager из пространства имен Windows.Phone.Storage, чтобы извлекать имя файла из токена, получаемого приложением. Затем код копирует файл из общего местоположения в локальное хранилище приложения, откуда к нему может осуществляться доступ. Примечание. Необходимо скопировать файл из общего системного расположения перед тем, как предпринимать попытку доступа к файлу, который используется системой, и запускать сопоставление файлов. Файл копируется в локальное хранилище, затем код открывает файл и загружает его содержимое. В приложении ContosoCookbook файл рецепта — это XML-файл следующего формата: Примечание. Формат файла и его содержимое определяются исключительно приложением. Приложение может использовать совершенно другой формат файлов. Это означает, что загружающий код после копирования файла в локальное хранилище будет отличаться от приведенного выше. Приложение использует классы LINQ to XML (XDocument и XName) для извлечения идентификатора рецепта из XML-файла. Выполнив извлечение идентификатора, приложение продолжает работу, как в предыдущем упражнении. Задание 3. Тестирование сопоставлений файлов Существует три способа протестировать сопоставления файлов.
Если на устройстве нет доступных зарегистрированных приложений, ОС Windows Phone представляет стандартное системное диалоговое окно (см. изображение ниже). Рис. 7. Примечание. Можно настроить учетную запись электронной почты в эмуляторе Windows Phone и получать электронные письма, однако для этого придется выполнить множество операций по настройке. Мы не будем рассматривать это в данном занятии.
Чтобы настроить тестирование сопоставлений файлов с помощью вспомогательного приложения, выполните следующие действия:
Этот код вызывает метод WriteFiles, который инициализирует пример файла, а затем запускает навигацию по приложениям с помощью описанного выше метода LaunchFileAsync. 7. Добавьте метод WriteFiles:Этот метод открывает встроенный файл рецепта и копирует его в локальную папку приложения, чтобы использовать его для запуска сопоставлений файлов. 8. Запустите новое приложение, а затем нажмите кнопку. Приложение ContosoCookbook должно запуститься и отобразить рецепт. 9. На этом упражнение и практическое занятие завершено. Краткая информация: На этом занятии мы рассмотрели действия, которые следует выполнить для сопоставления файлов и имен схем URI в приложении Windows Phone 8. Для этого необходимо зарегистрировать сопоставление в файле манифеста приложения, реализовать класс средства сопоставления URI для фильтрации и обработки запуска приложений, добавить возможность загрузки данных из файлов и извлечения параметров из URI. Теперь вы научились создавать приложение, использующее сопоставления файлов и имен схем URI, чтобы обмениваться данными с другими приложениями и расширять возможности взаимодействия. |