Phát triển Windows 10 - Hợp đồng chia sẻ
Trong chương này, chúng ta sẽ học cách chia sẻ dữ liệu giữa các ứng dụng. Người dùng thường bắt gặp thông tin mà họ hào hứng chia sẻ với ai đó hoặc sử dụng nó trong một ứng dụng khác. Ngày nay, người dùng muốn sử dụng công nghệ để kết nối và chia sẻ với những người khác.
Người dùng có thể muốn chia sẻ -
- Một liên kết với mạng xã hội của họ
- Sao chép ảnh vào báo cáo
- Tải tệp lên bộ nhớ đám mây
Các ứng dụng ngày nay, cần đảm bảo rằng dữ liệu mà chúng sử dụng cũng có sẵn để người dùng chia sẻ và trao đổi. Chia sẻ là một tính năng nhẹ, dễ dàng thêm vào ứng dụng UWP của bạn. Có một số cách để ứng dụng trao đổi dữ liệu với các ứng dụng khác.
Trong các ứng dụng UWP, tính năng chia sẻ có thể được hỗ trợ theo những cách sau;
Đầu tiên, ứng dụng có thể là một ứng dụng nguồn cung cấp nội dung mà người dùng muốn chia sẻ.
Thứ hai, ứng dụng có thể là một ứng dụng đích mà người dùng chọn làm điểm đến cho nội dung được chia sẻ.
Một ứng dụng cũng có thể là ứng dụng nguồn và ứng dụng đích.
Chia sẻ nội dung
Chia sẻ nội dung từ một ứng dụng, là một ứng dụng nguồn rất đơn giản. Để thực hiện bất kỳ hoạt động chia sẻ nào, bạn sẽ cầnDataPackageđối tượng lớp. Đối tượng này chứa dữ liệu mà người dùng muốn chia sẻ.
Các loại nội dung sau có thể được bao gồm trong DataPackage đối tượng -
- Văn bản thô
- Mã định danh tài nguyên đồng nhất (URI)
- HTML
- Văn bản được định dạng
- Bitmaps
- Files
- Dữ liệu do nhà phát triển xác định
Trong khi chia sẻ dữ liệu, bạn có thể bao gồm một hoặc nhiều định dạng nêu trên. Để hỗ trợ chia sẻ trong ứng dụng của bạn, trước tiên bạn cần lấy phiên bản củaDataTransferManager lớp học.
Sau đó, nó sẽ đăng ký một trình xử lý sự kiện được gọi bất cứ khi nào DataRequested sự kiện xảy ra.
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
DataRequestedEventArgs>(this.ShareTextHandler);
Khi ứng dụng của bạn nhận được DataRequest thì ứng dụng của bạn đã sẵn sàng để thêm nội dung mà người dùng muốn chia sẻ.
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!");
}
Bất kỳ nội dung nào mà ứng dụng của bạn chia sẻ, phải chứa hai thuộc tính:
- Thuộc tính Title, là thuộc tính bắt buộc và phải được đặt.
- Nội dung chính nó.
Nhận nội dung được chia sẻ
Nếu bạn muốn ứng dụng của mình có thể nhận được nội dung được chia sẻ thì điều đầu tiên bạn cần làm là khai báo rằng nó hỗ trợ Share Contract. Sau khi khai báo, hệ thống sẽ cho ứng dụng của bạn sẵn sàng tiếp nhận nội dung.
Để thêm hỗ trợ của Hợp đồng Cổ phần -
Nhấp đúp vào package.appmanifest tập tin.
Đi đến Declarationschuyển hướng. ChọnShare Target từ Available Declarations danh sách và nhấp vào Add cái nút.
Nếu bạn muốn ứng dụng của mình nhận bất kỳ loại tệp nào dưới dạng nội dung chia sẻ, thì bạn có thể chỉ định các loại tệp và định dạng dữ liệu.
Để chỉ định Định dạng Dữ liệu mà bạn hỗ trợ, hãy truy cập Data Formats phần của Declarations trang và nhấp vào Add New.
Nhập tên của định dạng dữ liệu bạn hỗ trợ. Ví dụ,"Text".
Để chỉ định loại tệp mà bạn hỗ trợ, trong Supported File Types phần của Declarations trang, nhấp vào Add New.
Nhập phần mở rộng tên tệp mà bạn muốn hỗ trợ, ví dụ: .pdf
Nếu bạn muốn ủng hộ All file các loại, kiểm tra SupportsAnyFileType cái hộp.
Khi người dùng chọn ứng dụng của bạn làm ứng dụng đích để chia sẻ dữ liệu thì OnShareTargetActivated sự kiện bị sa thải.
Ứng dụng của bạn cần xử lý sự kiện này để xử lý dữ liệu mà người dùng muốn chia sẻ.
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) {
// Code to handle activation goes here.
}
Tất cả dữ liệu mà người dùng muốn chia sẻ với bất kỳ ứng dụng nào được chứa trong ShareOperationvật. Bạn cũng có thể kiểm tra định dạng dữ liệu mà nó chứa.
Dưới đây là đoạn mã xử lý shared content ở định dạng văn bản thuần túy.
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;
}
Chúng ta hãy xem một ví dụ đơn giản bằng cách tạo một dự án UWP mới, dự án này sẽ chia sẻ một liên kết web.
Dưới đây là mã XAML trong đó một nút được tạo với một số thuộc tính.
<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>
Mã C # trong đó sự kiện nhấp vào nút được triển khai và mã chia sẻ URI được cung cấp bên dưới.
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();
}
}
}
Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy trang sau trên trình giả lập.
Khi nhấp vào nút, nó sẽ đưa ra các tùy chọn để chia sẻ trên ứng dụng nào.
Nhấp vào nhắn tin và cửa sổ sau sẽ được hiển thị từ đó bạn có thể gửi liên kết cho bất kỳ ai.