Разработка Windows 10 - договор о совместном использовании
В этой главе мы узнаем, как обмениваться данными между приложениями. Пользователи часто сталкиваются с информацией, которой они хотят поделиться с кем-то или использовать ее в другом приложении. В настоящее время пользователи хотят использовать технологии для связи и обмена информацией с другими людьми.
Пользователь может захотеть поделиться -
- Связь с их социальной сетью
- Скопируйте картинку в отчет
- Загрузите файл в облачное хранилище
Сегодня приложениям необходимо гарантировать, что данные, которые они используют, также доступны пользователям для совместного использования и обмена. Общий доступ - это облегченная функция, которую легко добавить в приложение UWP. Приложения могут обмениваться данными с другими приложениями несколькими способами.
В приложениях UWP функция общего доступа может поддерживаться следующими способами;
Во-первых, приложение может быть исходным приложением, предоставляющим контент, которым пользователь хочет поделиться.
Во-вторых, приложение может быть целевым приложением, которое пользователь выбирает в качестве места назначения для общего контента.
Приложение также может быть как исходным, так и целевым приложением.
Обмен контентом
Совместное использование контента из приложения, которое является исходным приложением, очень просто. Для выполнения любой операции обмена вам понадобитсяDataPackageобъект класса. Этот объект содержит данные, которыми пользователь хочет поделиться.
Следующие типы контента могут быть включены в DataPackage объект -
- Простой текст
- Универсальные идентификаторы ресурсов (URI)
- HTML
- Форматированный текст
- Bitmaps
- Files
- Данные, определенные разработчиком
При обмене данными вы можете включить один или несколько из вышеупомянутых форматов. Чтобы поддерживать совместное использование в вашем приложении, вам сначала нужно получить экземплярDataTransferManager класс.
Затем он зарегистрирует обработчик событий, который вызывается всякий раз, когда DataRequested событие происходит.
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
DataRequestedEventArgs>(this.ShareTextHandler);
Когда ваше приложение получает DataRequest объект, то ваше приложение готово добавить контент, которым пользователь хочет поделиться.
private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e){
DataRequest request = e.Request;
// The Title is mandatory
request.Data.Properties.Title = "Share Text Example";
request.Data.Properties.Description = "A demonstration that shows how to share text.";
request.Data.SetText("Hello World!");
}
Любой контент, который разделяет ваше приложение, должен содержать два свойства:
- Свойство Title, которое является обязательным и должно быть установлено.
- Само содержание.
Получение общего содержимого
Если вы хотите, чтобы ваше приложение могло получать общий контент, первое, что вам нужно сделать, это заявить, что оно поддерживает Share Contract. После объявления система сделает ваше приложение доступным для приема контента.
Чтобы добавить поддержку Договора о доле -
Дважды щелкните значок package.appmanifest файл.
Перейти к Declarationsтаб. выберитеShare Target из Available Declarations список и щелкните Add кнопка.
Если вы хотите, чтобы ваше приложение получало файлы любого типа в качестве общего содержимого, вы можете указать типы файлов и форматы данных.
Чтобы указать поддерживаемые форматы данных, перейдите в Data Formats раздел, из Declarations страницу и щелкните Add New.
Введите название поддерживаемого формата данных. Например,"Text".
Чтобы указать поддерживаемый тип файла, в Supported File Types раздел Declarations страницу, щелкните Add New.
Введите расширение имени файла, которое вы хотите поддерживать, например, .pdf
Если вы хотите поддержать All file типы, проверьте SupportsAnyFileType коробка.
Когда пользователь выбирает ваше приложение в качестве целевого приложения для обмена данными, тогда OnShareTargetActivated событие запущено.
Ваше приложение должно обработать это событие, чтобы обработать данные, которыми пользователь хочет поделиться.
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) {
// Code to handle activation goes here.
}
Все данные, которыми пользователь хочет поделиться с любым приложением, содержатся в ShareOperationобъект. Вы также можете проверить формат содержащихся в нем данных.
Ниже приведен фрагмент кода, который обрабатывает shared content в текстовом формате.
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;
}
Давайте посмотрим на простой пример, создав новый проект UWP, который будет совместно использовать веб-ссылку.
Ниже приведен код XAML, в котором создается кнопка с некоторыми свойствами.
<Page
x:Class = "UWPSharingDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPSharingDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation = "Vertical">
<TextBlock Text = "Share Web Link" Style = "{StaticResource
HeaderTextBlockStyle}" Margin = "30"></TextBlock>
<Button Content = "Invoke share contract" Margin = "10"
Name = "InvokeShareContractButton" Click = "InvokeShareContractButton_Click"
></Button>
</StackPanel>
</Grid>
</Page>
Код C #, в котором реализовано событие нажатия кнопки, и код совместного использования URI приведен ниже.
using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPSharingDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
DataTransferManager dataTransferManager;
public MainPage() {
this.InitializeComponent();
dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += dataTransferManager_DataRequested;
}
void dataTransferManager_DataRequested(DataTransferManager sender,
DataRequestedEventArgs args) {
Uri sharedWebLink = new Uri("https://msdn.microsoft.com");
if (sharedWebLink != null) {
DataPackage dataPackage = args.Request.Data;
dataPackage.Properties.Title = "Sharing MSDN link";
dataPackage.Properties.Description = "The Microsoft Developer Network (MSDN)
is designed to help developers write applications using Microsoft
products and technologies.";
dataPackage.SetWebLink(sharedWebLink);
}
}
private void InvokeShareContractButton_Click(object sender, RoutedEventArgs e) {
DataTransferManager.ShowShareUI();
}
}
}
Когда приведенный выше код скомпилирован и запущен, вы увидите следующую страницу в эмуляторе.
Когда кнопка нажата, появляется возможность поделиться в каком приложении.
Нажмите на обмен сообщениями, и откроется следующее окно, откуда вы можете отправить ссылку кому угодно.