Поделиться через


Получение данных

В этой статье объясняется, как получать содержимое в приложении универсальная платформа Windows (UWP), которым предоставлен общий доступ из другого приложения с помощью контракта Share. Этот контракт общего доступа позволяет приложению отображаться в качестве параметра при вызове общей папки пользователем.

Объявление приложения в качестве целевого объекта общего доступа

В системе отображается список возможных целевых приложений, когда пользователь вызывает Общий доступ. Чтобы появиться в списке, приложение должно объявить, что он поддерживает контракт общей папки. Это позволяет системе знать, что ваше приложение доступно для получения содержимого.

  1. Откройте файл манифеста. Он должен вызываться примерно так же, как package.appxmanifest.
  2. Откройте вкладку "Объявления".
  3. Выберите "Целевой ресурс" из списка доступных объявлений и нажмите кнопку "Добавить".

Выбор типов файлов и форматов

Затем определите, какие типы файлов и форматы данных поддерживаются. API share поддерживают несколько стандартных форматов, таких как текст, HTML и растровое изображение. Можно также указать пользовательские типы файлов и форматы данных. Если это сделать, помните, что исходные приложения должны знать, какие типы и форматы; в противном случае эти приложения не могут использовать форматы для совместного использования данных.

Регистрируйте только форматы, которые может обрабатывать ваше приложение. Только целевые приложения, поддерживающие общий доступ к данным, отображаются при вызове общей папки.

Чтобы задать типы файлов, выполните следующие действия.

  1. Откройте файл манифеста. Он должен вызываться примерно так же, как package.appxmanifest.
  2. В разделе "Поддерживаемые типы файлов" на странице "Объявления" нажмите кнопку "Добавить".
  3. Введите расширение имени файла, которое требуется поддерживать, например ".docx". Необходимо включить период. Если вы хотите поддерживать все типы файлов, установите флажок SupportAnyFileType .

Чтобы задать форматы данных:

  1. Откройте файл манифеста.
  2. Откройте раздел "Форматы данных" страницы "Объявления" и нажмите кнопку "Добавить".
  3. Введите имя поддерживаемого формата данных, например "Текст".

Обработка активации общего ресурса

Когда пользователь выбирает приложение (обычно выбрав его из списка доступных целевых приложений в пользовательском интерфейсе общего ресурса), вызывается событие 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 в систему путем вызова 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);
}

См. также