Объявления в манифесте
Для того, чтобы сделать приложение поставщиком для средства выбора файлов, начинают – с чего же еще! – с добавления соответствующего объявления в манифест. В данном случае применимы три объявления: Средство выбора файлов для открытия (File Open Picker), Средство выбора файлов для сохранения (File Save Picker) и Средство обновления кэшированных файлов (Cached File Updater), как показано ниже, на примере окна редактора манифеста в Visual Studio. Каждое из этих объявлений можно сделать один раз в пределах одного приложения.
Объявления Средство выбора файлов для открытия (File Open Picker) и Средство выбора файлов для сохранения (File Save Picker) это то, что делает приложение-поставщика доступным в диалоговом окне, запущенном с помощью Windows.Storage.Pickers.FileOpenPicker и API FileSavePicker. Вызывающее приложение в обоих случаях ничего не знает о приложении, которое может быть запущено – всё взаимодействие между средством выбора файлов и поставщиком происходит с помощью контракта, и брокер контракта ответственен, во-первых, за отображение интерфейса, посредством которого можно выбрать объект, и, во-вторых, за возвращение объекта StorageFile для выбранного элемента.
И для контракта Средство выбора файлов для открытия (File Open Picker), и для контракта Средство выбора файлов для сохранения (File Save Picker), приложение-поставщик отражает в манифесте типы файлов, которые оно может обслуживать. Это выполняется с помощью кнопки Добавить (Add New) на нижеприведенном изображении. Затем средство выбора файлов делает приложение доступным для выбора только тогда, когда вызывающее приложение сообщает о подходящих типах файлов. Параметр Поддерживает все типы файлов (Supports Any File Type), который вы здесь видите позволяет приложению всегда появляться в списке, но это подходит только для приложений, наподобие SkyDrive, которые предоставляют доступ к некоему универсальному хранилищу файлов. Приложения, которые работают лишь со специфическими типами файлов, следует заявлять лишь об этих типах.
Приложение-поставщик содержит разные описания Начальной страницы (Start Page) для контрактов открытия и сохранения – это различные и независимые операции. И в том, и в другом случаях, как мы видели для других контрактов, это те страницы, которые средство выбора файлов загружает, когда пользователь выбирает приложение-поставщик. Как и в случае с целевым приложением для контракта Общий доступ, эти страницы обычно независимы от основного приложения и имеют собственный скриптовый контекст и обработчики активации, как мы увидим в следующем разделе. (Опять же, параметры Исполняемый файл (Executable) и Точка входа (Entry point) предназначены для других языков).
Вы можете задаться вопросом: почему контракты открытия и сохранения файлов разделены? Разве большинство приложений не реализуют обе функции? Не обязательно. Если вы создаёте приложение-поставщик для веб-сервиса, который, фактически, предоставляет данные только для чтения (наподобие изображений в результатах, полученных от поисковой системы), вы можете обслуживать лишь открытие файлов. Если сервис поддерживает создание новых файлов и обновление существующих файлов, как обычно делают сервисы по управлению фотографиями или документами, тогда вам так же нужно обрабатывать сохранение файлов. Возможен и сценарий, где поставщик обслуживает лишь операции сохранения файлов, такие, как запись данных в сервис общего доступа. Коротко говоря, Windows не может предположить того, какова природа источников данных, с которыми будут работать приложения-поставщики, поэтому данные два контракта разделены.
Так как следующий большой раздел данной лекции посвящен контракту Средство обновления кэшированных файлов (Cached File Updater), хорошо бы знать, как он соотносится с другими. Этот контракт позволяет приложению-поставщику синхронизировать локальные и удалённые копии файла, обычно подписываясь на уведомления об изменении или доступе к этим файлам и управляя ими. Это обычно используется для приложений, которые представляют хранилище файлов, в котором пользователь часто открывает и сохраняет файлы, наподобие SkyDrive или приложения баз данных. На самом деле, это сервисы двусторонней привязки данных для файлов, где и локальная и удалённая копии могут быть обновлены независимо. В итоге, эта возможность реализуется совместно с контрактами средств выбора файлов для приложения-поставщика.
Совет. Как упомянуто ранее материал "Общий доступ к данным и обмен данными" (http://msdn.microsoft.com/library/windows/apps/hh464923.aspx ) в Центре разработчиков Windows имеет некоторые полезные руководства о том, когда приложения могут быть поставщиками для контракта средства сохранения файлов и когда лучше подходит их настройка в виде целевых приложений общего доступа.
Активация поставщика средства выбора файла
Демонстрация контракта поставщика средства выбор файла – для открытия и сохранения – находится в примере "Контракт Средство выбора файла" (http://code.msdn.microsoft.com/windowsapps/File-picker-app-extension-0cb95155 ), который я, для ясности, буду упоминать как пример поставщика. Декларация и того и другого включена в манифест, с параметром Поддерживает все типы файлов (Supports Any File Type), в итоге, приложение из примера будет перечислена вместе с другими приложениями при всех вызовах средства выбора файла, как показано здесь:
При активации будет загружена начальная страница, указанная в манифесте для соответствующего контракта (открытия или сохранения). Это страницы fileOpenPicker.html и fileSavePicker.html, которые можно найти в корневом разделе проекта. Обе эти страницы загружаются независимо от основного приложения и выглядят так, как показано на рис. 3.1. и рис. 3.2. Обратите внимание на то, что заголовок приложения и цветовая схема определены параметрами закладки Интерфейс приложения (Application UI) в манифесте приложения-поставщика. В частности, текст берется из поля Отображаемое имя (Display Name), а цвета берутся из параметров Текст переднего плана (Foreground Text) и Цвет фона (Background Color) из набора параметров Плитка (Tile), как показано на рис. 3.3. Отметим, что система автоматически добавляет стрелку, направленную вниз после заголовка на рис. 3.1 и рис. 3.2, с его помощью пользователь может выбрать другое расположение или приложение-поставщик.
Рис. 3.3. Установки на закладке Интерфейс приложения (Application UI) в манифесте, которые влияют на внешний вид окон средств открытия и сохранения файлов приложения-поставщика. Серые полосы в изображении представляют собой другие поля, которые я скрыл для краткости
Когда вы впервые запустите этот пример, вы не увидите ни одной из этих страниц. Вместо этого вы увидите страницу, с которой вы можете запустить средство открытия или сохранения файлов и выбрать это приложение в качестве поставщика. Вы можете сделать это, если хотите, но я рекомендую использовать другое приложение для запуска средств работы с файлами, таким образом мы может быть уверены в том, какое приложение какую роль играет. Для этой цели вы можете использовать пример "Средство выбора файлов" (http://code.msdn.microsoft.com/windowsapps/File-picker-sample-9f294cba ) (в качестве приложения-потребителя). Вы даже можете использовать что-то вроде приложения Windows 8 Music (Музыка), команда Open File (Открыть файл) на его панели приложения вызовет средство выбора файлов, в интерфейсе которого будет присутствовать и наш пример.
Что бы вы ни выбрали, важная часть примера поставщика – это его раздельные страницы для обслуживания контрактов, то есть, повторюсь, fileOpenPicker.html и fileSavePicker.html. В первом случае, код содержится в js/fileOpenPicker.js, где мы можем обработчик события activated с видом активации fileOpenPicker:
function activated(eventObject) { if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.fileOpenPicker) { fileOpenPickerUI = eventObject.detail.fileOpenPickerUI; eventObject.setPromise(WinJS.UI.processAll().then(function () { // Перемещение на страницу сценария... })); } }
Здесь eventObject.detail – это объект WebUIFileOpenPickerActivatedEventArgs (http://msdn.microsoft.com/library/windows/apps/windows.ui.webui.webuifileopenpickeractivatedeventargs.aspx ), свойство fileOpenPickerUI которого (объект Windows.Storage.Pickers.Providers.FileOpenPickerUI (http://msdn.microsoft.com/library/windows/apps/windows.storage.pickers.provider.fileopenpickerui.aspx )) предоставляет средства для выполнения обязанностей поставщика при обслуживании контракта.
Во втором случае код находится в js/fileSavePicker.js, с видом активации fileSavePicker:
function activated(eventObject) { if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.fileSavePicker) { fileSavePickerUI = eventObject.detail.fileSavePickerUI; eventObject.setPromise(WinJS.UI.processAll().then(function () { // Перемещение на страницу сценария })); } }
Здесь eventObject.detail – это объект WebUIFileSavePickerActivatedEventArgs (http://msdn.microsoft.com/library/windows/apps/windows.ui.webui.webuifilesavepickeractivatedeventargs.aspx ). Как и в случае с контрактом открытия, его свойство fileSavePickerUI (объект Windows.Storage.Pickers.Providers.FileSavePickerUI (http://msdn.microsoft.com/library/windows/apps/windows.storage.pickers.provider.filesavepickerui.aspx )) предоставляет средства для выполнения обязаностей поставщика при обслуживании контракта.
И в случае активации для открытия файла, и в случае активации для сохранения, содержимое начальной страницы контракта отображается внутри области, сверху и снизу которой расположены панели, предоставленные системой. Если содержимое страницы окажется больше, чем предоставленное пространство, появятся полосы прокрутки, но только в этой области – верхняя и нижняя полосы всегда будут оставаться на одном и том же месте. В обоих случаях WinRT так же предоставляет обычные средства, используемые при активации, такие, как свойства splashScreen и previousExecutionState, подобное мы видели в Главе 3 курса "Введение в разработку приложений для Windows 8 с использованием HTML, CSS и JavaScript", что означает, что вам следует перезагрузить необходимое состояние сеанса и использовать, при необходимости, расширенный экран-заставку.
Однако, гораздо интереснее – это взаимодействие, характерное для контрактов, которое представлено в различных сценариях для этих страниц (как вы можете видеть на рис. 3.1. и рис. 3.2.). Взглянем на каждый из них.
Примечание. Для того, чтобы узнать подробности по проектированию опыта взаимодействия пользователя со средством выбора файлов, обратитесь к материалу "Руководство по средствам выбора файлов) (http://msdn.microsoft.com/library/windows/apps/hh465182.aspx ).