การพัฒนา Windows 10 - สัญญาการแบ่งปัน
ในบทนี้เราจะเรียนรู้วิธีการแบ่งปันข้อมูลระหว่างแอปพลิเคชัน ผู้ใช้มักจะเจอข้อมูลที่พวกเขารู้สึกตื่นเต้นที่จะแบ่งปันกับใครบางคนหรือใช้ข้อมูลนั้นในแอปพลิเคชันอื่น ปัจจุบันผู้ใช้ต้องการใช้เทคโนโลยีเพื่อเชื่อมต่อและแบ่งปันกับคนอื่น ๆ
ผู้ใช้อาจต้องการแบ่งปัน -
- ลิงค์กับโซเชียลเน็ตเวิร์ก
- คัดลอกรูปภาพลงในรายงาน
- อัปโหลดไฟล์ไปยังที่เก็บข้อมูลบนคลาวด์
แอปพลิเคชันในปัจจุบันจำเป็นต้องตรวจสอบให้แน่ใจว่าข้อมูลที่ใช้นั้นยังพร้อมให้ผู้ใช้แบ่งปันและแลกเปลี่ยนได้ Share เป็นคุณสมบัติที่มีน้ำหนักเบาซึ่งง่ายต่อการเพิ่มลงในแอปพลิเคชัน UWP ของคุณ มีหลายวิธีสำหรับแอพในการแลกเปลี่ยนข้อมูลกับแอพอื่น
ในแอปพลิเคชัน UWP คุณสมบัติการแชร์สามารถรองรับได้หลายวิธีดังต่อไปนี้
ขั้นแรกแอปพลิเคชันอาจเป็นแอปต้นทางที่ให้เนื้อหาที่ผู้ใช้ต้องการแชร์
ประการที่สองแอปอาจเป็นแอปเป้าหมายที่ผู้ใช้เลือกเป็นปลายทางสำหรับเนื้อหาที่แชร์
แอปอาจเป็นได้ทั้งแอปต้นทางและแอปเป้าหมาย
การแบ่งปันเนื้อหา
การแชร์เนื้อหาจากแอปพลิเคชันซึ่งเป็นแอปต้นทางนั้นง่ายมาก ในการดำเนินการแบ่งปันคุณจะต้องมีไฟล์DataPackageคลาสวัตถุ วัตถุนี้มีข้อมูลซึ่งผู้ใช้ต้องการแชร์
เนื้อหาประเภทต่อไปนี้สามารถรวมอยู่ใน DataPackage วัตถุ -
- ข้อความธรรมดา
- Uniform Resource Identifier (URI)
- HTML
- ข้อความที่จัดรูปแบบ
- Bitmaps
- Files
- ข้อมูลที่ผู้พัฒนากำหนด
ในขณะที่แบ่งปันข้อมูลคุณสามารถรวมรูปแบบที่กล่าวถึงข้างต้นได้ตั้งแต่หนึ่งรูปแบบขึ้นไป เพื่อรองรับการแชร์ในแอปพลิเคชันของคุณก่อนอื่นคุณต้องได้รับอินสแตนซ์ของไฟล์DataTransferManager ชั้นเรียน
จากนั้นจะลงทะเบียนตัวจัดการเหตุการณ์ที่เรียกเมื่อใดก็ตามที่ a 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();
}
}
}
เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานคุณจะเห็นหน้าต่อไปนี้บนโปรแกรมจำลอง

เมื่อคลิกปุ่มจะมีตัวเลือกให้แชร์ว่าแอปพลิเคชันใด

คลิกที่การส่งข้อความและหน้าต่างต่อไปนี้จะปรากฏขึ้นซึ่งคุณสามารถส่งลิงค์ไปให้ใครก็ได้
