Windows 10 开发 – 共享合同
Windows 10 开发 – 共享合同
在本章中,我们将学习如何在应用程序之间共享数据。用户经常会遇到他们很高兴与某人分享或在其他应用程序中使用的信息。如今,用户希望使用技术与其他人联系和分享。
用户可能想要分享 –
- 与他们的社交网络的链接
- 将图片复制到报告中
- 上传文件到云存储
今天的应用程序需要确保它们使用的数据也可供用户共享和交换。共享是一种轻量级功能,可以轻松添加到您的 UWP 应用程序中。应用程序可以通过多种方式与其他应用程序交换数据。
在 UWP 应用中,可以通过以下方式支持共享功能;
-
首先,应用程序可以是提供用户想要共享的内容的源应用程序。
-
其次,应用程序可以是用户选择作为共享内容目的地的目标应用程序。
-
应用程序也可以是源应用程序和目标应用程序。
分享内容
从应用程序(源应用程序)共享内容非常简单。要执行任何共享操作,您将需要DataPackage类对象。该对象包含用户想要共享的数据。
DataPackage对象中可以包含以下类型的内容–
- 纯文本
- 统一资源标识符 (URI)
- HTML
- 格式化文本
- 位图
- 文件
- 开发者定义的数据
在共享数据时,您可以包含一种或多种上述格式。要在您的应用程序中支持共享,您首先需要获取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文件。
-
转到声明选项卡。从可用声明列表中选择共享目标,然后单击添加按钮。
-
如果您希望您的应用程序接收任何类型的文件作为共享内容,那么您可以指定文件类型和数据格式。
-
要指定您支持的数据格式,请转到“声明”页面的“数据格式”部分,然后单击“添加新”。
-
键入您支持的数据格式的名称。例如,“文本”。
-
要指定您支持的文件类型,请在“声明”页面的“支持的文件类型”部分中,单击“新增”。
-
键入您要支持的文件扩展名,例如.pdf
-
如果要支持所有文件类型,请选中SupportsAnyFileType框。
-
当用户选择您的应用程序作为共享数据的目标应用程序时,将触发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; }
让我们看一个简单的例子,创建一个新的 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>
下面给出了实现按钮单击事件和 URI 共享代码的 C# 代码。
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(); } } }
当上面的代码编译执行后,你会在模拟器上看到如下页面。
单击该按钮时,它将提供在哪个应用程序上共享的选项。
单击消息,将显示以下窗口,您可以在其中将链接发送给任何人。