Получение данных
В этой статье объясняется, как получать содержимое в приложении универсальная платформа Windows (UWP), которым предоставлен общий доступ из другого приложения с помощью контракта Share. Этот контракт общего доступа позволяет приложению отображаться в качестве параметра при вызове общей папки пользователем.
Объявление приложения в качестве целевого объекта общего доступа
В системе отображается список возможных целевых приложений, когда пользователь вызывает Общий доступ. Чтобы появиться в списке, приложение должно объявить, что он поддерживает контракт общей папки. Это позволяет системе знать, что ваше приложение доступно для получения содержимого.
- Откройте файл манифеста. Он должен вызываться примерно так же, как package.appxmanifest.
- Откройте вкладку "Объявления".
- Выберите "Целевой ресурс" из списка доступных объявлений и нажмите кнопку "Добавить".
Выбор типов файлов и форматов
Затем определите, какие типы файлов и форматы данных поддерживаются. API share поддерживают несколько стандартных форматов, таких как текст, HTML и растровое изображение. Можно также указать пользовательские типы файлов и форматы данных. Если это сделать, помните, что исходные приложения должны знать, какие типы и форматы; в противном случае эти приложения не могут использовать форматы для совместного использования данных.
Регистрируйте только форматы, которые может обрабатывать ваше приложение. Только целевые приложения, поддерживающие общий доступ к данным, отображаются при вызове общей папки.
Чтобы задать типы файлов, выполните следующие действия.
- Откройте файл манифеста. Он должен вызываться примерно так же, как package.appxmanifest.
- В разделе "Поддерживаемые типы файлов" на странице "Объявления" нажмите кнопку "Добавить".
- Введите расширение имени файла, которое требуется поддерживать, например ".docx". Необходимо включить период. Если вы хотите поддерживать все типы файлов, установите флажок SupportAnyFileType .
Чтобы задать форматы данных:
- Откройте файл манифеста.
- Откройте раздел "Форматы данных" страницы "Объявления" и нажмите кнопку "Добавить".
- Введите имя поддерживаемого формата данных, например "Текст".
Обработка активации общего ресурса
Когда пользователь выбирает приложение (обычно выбрав его из списка доступных целевых приложений в пользовательском интерфейсе общего ресурса), вызывается событие OnShareTargetActivated. Приложение должно обработать это событие для обработки данных, к которым пользователь хочет предоставить общий доступ.
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
// Code to handle activation goes here.
}
Данные, к которым пользователь хочет предоставить общий доступ, содержатся в объекте ShareOperation . Этот объект можно использовать для проверки формата содержащихся в нем данных.
ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
string text = await shareOperation.Data.GetTextAsync();
// To output the text from this example, you need a TextBlock control
// with a name of "sharedContent".
sharedContent.Text = "Text: " + text;
}
Состояние общего доступа к отчету
В некоторых случаях может потребоваться время для обработки данных, которыми он хочет предоставить общий доступ. К примерам относятся пользователи, совместно использующие коллекции файлов или изображений. Эти элементы больше простой текстовой строки, поэтому они занимают больше времени для обработки.
shareOperation.ReportStarted();
После вызова ReportStarted не ожидайте больше взаимодействия пользователей с приложением. В результате вы не должны вызывать его, если приложение не находится в момент, когда его можно закрыть пользователем.
При использовании расширенной общей папки пользователь может закрыть исходное приложение, прежде чем приложение имеет все данные из объекта DataPackage. В результате мы рекомендуем сообщить системе, когда приложение приобрело необходимые данные. Таким образом, система может приостановить или завершить исходное приложение по мере необходимости.
shareOperation.ReportSubmittedBackgroundTask();
Если что-то не так, вызовите ReportError , чтобы отправить сообщение об ошибке в систему. Пользователь увидит сообщение при проверке состояния общей папки. На этом этапе приложение завершится, и общий ресурс завершится. Пользователю потребуется снова начать совместное использование содержимого в приложении. В зависимости от вашего сценария можно решить, что определенная ошибка недостаточно серьезна, чтобы завершить операцию общего доступа. В этом случае можно не вызывать ReportError и продолжать работу с общей папкой.
shareOperation.ReportError("Could not reach the server! Try again later.");
Наконец, когда приложение успешно обработало общее содержимое, необходимо вызвать ReportCompleted , чтобы сообщить системе.
shareOperation.ReportCompleted();
При использовании этих методов обычно вызывается в порядке, который только что описан, и вы не вызываете их более одного раза. Однако существует время, когда целевое приложение может вызывать ReportDataRetrieved до ReportStarted. Например, приложение может получить данные в рамках задачи в обработчике активации, но не вызывать ReportStarted , пока пользователь не выберет кнопку "Общий доступ ".
Возвращает quickLink, если общий доступ выполнен успешно
Когда пользователь выбирает приложение для получения содержимого, рекомендуется создать QuickLink. QuickLink — это ярлык, упрощающий предоставление пользователям общего доступа к информации с приложением. Например, вы можете создать quickLink , который открывает новое почтовое сообщение, предварительно настроенное с адресом электронной почты друга.
QuickLink должен иметь заголовок, значок и идентификатор. Заголовок (например, "Электронная мама") и значок отображаются, когда пользователь нажимает кнопку "Общий доступ". Идентификатор — это то, что приложение использует для доступа к любой пользовательской информации, например адресу электронной почты или учетным данным для входа. Когда приложение создает QuickLink, приложение возвращает QuickLink в систему путем вызова ReportCompleted.
QuickLink фактически не сохраняет данные. Вместо этого он содержит идентификатор, который при выборе отправляется в приложение. Ваше приложение отвечает за хранение идентификатора QuickLink и соответствующих пользовательских данных. Когда пользователь нажимает quickLink, его идентификатор можно получить через свойство QuickLinkId.
async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
QuickLink quickLinkInfo = new QuickLink
{
Id = quickLinkId,
Title = quickLinkTitle,
// For quicklinks, the supported FileTypes and DataFormats are set
// independently from the manifest
SupportedFileTypes = { "*" },
SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri,
StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
};
StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
"assets\\user.png", CreationCollisionOption.OpenIfExists);
quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
shareOperation.ReportCompleted(quickLinkInfo);
}