Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как получать содержимое в приложении универсальной платформы 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);
}