Lion Pham

Learning from Sharing

  • About
  • Contact

Kết nối

  • Email
  • GitHub
  • LinkedIn

Powered by WordPress & Microsoft Azure

You are here: Home / Programming / Lập trình Windows 10 / Cách chia sẻ dữ liệu trong Windows 10

Cách chia sẻ dữ liệu trong Windows 10

Tháng Mười Hai 4, 2015 by Lion Pham Leave a Comment

Đây là bài viết thứ tư trong loạt bài viết hướng dẫn Lập trình Windows 10.

Trong bài viết này, mình và các bạn sẽ cùng nhau tìm hiểu về cơ chế chia sẻ dữ liệu trong Windows 10. Làm sao có thể chia sẻ một đoạn văn bản, một đường dẫn (link) hay một hình ảnh trong ứng dụng cho người khác thông qua mạng xã hội Facebook, email hay qua tin nhắn SMS.

Chia sẻ dữ liệu là một trong những tính năng có thể nói là sống còn cho một ứng dụng di động hiện nay. Việc hỗ trợ chia sẻ dữ liệu mang đến khá nhiều lợi ích cho ứng dụng của bạn trong đó phải kể đến tính lan tỏa. Tính lan tỏa ở đây là gì? Lấy ví dụ ứng dụng của bạn là một ứng dụng tạo thiệp giáng sinh chẳng hạn, ứng dụng này của bạn có hỗ trợ tính năng chia sẻ thiệp, sau khi người dùng tạo thiệp giáng sinh xong, họ dùng tính năng chia sẻ đó để chia sẻ thiệp lên mạng xã hội Facebook. Nếu bạn khéo léo chèn một đoạn credit ví dụ như tạo bởi ứng dụng ABC kèm đường dẫn để tải ứng dụng đó, với hiệu ứng lạn truyền trên cực mạnh của mạng xã hội Facebook, ứng dụng của bạn hoàn toàn có thể được nhiều người biết đến thông qua đoạn credit đó. Một hình thức quảng cáo gián tiếp miễn phí :D.

Vậy làm sao có thể tích hợp tính năng chia sẻ dữ liệu vào trong ứng dụng Windows 10?

Windows 10 cho phép các bạn thiết lập chia sẻ dữ liệu giữa ứng dụng với ứng dụng một cách dễ dàng thông qua tính năng Sharing Contract. Với Sharing Contract, các bạn có thể kiểm soát hoàn toàn được việc chia sẻ dữ liệu từ việc thiết kế nội dung chia sẻ cho đến việc đưa toàn quyền quyết định nơi mà dữ liệu được chia sẻ cho người dùng. Đây là một tính năng rất thú vụ của Windows 10.

Trong Windows 10, một ứng dụng có thể chia sẻ dữ liệu sang ứng dụng khác (Share Source) hoặc nhận dữ liệu được chia sẻ từ ứng dụng khác (Share Target). Với vai trò là Share Source, ứng dụng sẽ cung cấp nội dung mà người dùng muốn chia sẻ, còn với vai trò là Share Target, ứng dụng sẽ trở thành nơi nhận nội dung người dùng muốn chia sẻ. Một ứng dụng có thể đóng vai trò là Share Target hoặc Share Source hoặc cả hai.

Share Source

Như có nói ở trên, Share Source app là ứng dụng sẽ gửi dữ liệu chia sẻ sang cho ứng dụng khác. Trong trường hợp này, ứng dụng này có thể chia sẻ được những kiểu dữ liệu sau:

  • Văn bản
  • Đường dẫn (link)
  • Mã HTML
  • Hình ảnh
  • Các tập tin
  • Dữ liệu tùy biến

Chia sẻ văn bản

Để chia sẻ được văn bản, đầu tiên, chúng ta cần tạo một thể hiện (instance) của lớp (class) DataTransferManager trong namespace Windows.ApplicationModel.DataTransfer. Việc tạo mới instance của lớp DataTransferManager sẽ không thông qua hàm khởi tạo (constructor) mà sẽ được tạo thông qua hàm static GetForCurrentView.

private DataTransferManager dataTransferManager;

protected override void OnNavigatedTo(NavigationEventArgs e)
{
	// Đăng ký sự kiện khi mà người dùng hoặc ứng dụng yêu cầu chia sẻ dữ liệu
    this.dataTransferManager = DataTransferManager.GetForCurrentView();
    this.dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.OnDataRequested);
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
	// Hủy đăng ký sự kiện DataRequested để tránh việc xử lý không cần thiết
    this.dataTransferManager.DataRequested -= new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.OnDataRequested);
}

Ở đoạn code trên, các bạn thấy được mình tạo mới một instance của lớp DataTransferManager trong hàm OnNavigatedTo và đồng thời gán hàm xử lý sự kiện DataRequested.

DataRequested là sự kiện sẽ xảy ra khi mà người dùng hay ứng dụng có yêu cầu chia sẻ dữ liệu.

Ngoài ra, để tránh việc xử lý sự kiện DataRequested không cần thiết khi người dùng rời trang (Page) hiện tại, ở hàm OnNavigatingFrom mình có viết đoạn mã hủy gán hàm xử lý sự kiện DataRequested.

Tiếp theo, chúng ta sẽ thực hiện việc chia sẻ văn bản trong hàm xử lý sự kiện DataRequested có tên là OnDataRequested.

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	string dataPackageText = "VĂN BẢN MUỐN CHIA SẺ";
    if (!String.IsNullOrEmpty(dataPackageText))
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetText(dataPackageText);
	}
}

Như các bạn thấy ơ đoạn code trên, mình tạo mới mới một thực thể DataPackage thông qua tham số DataRequestedEventArgs của hàm OnDataRequested bằng cách gọi e.Request.Data. Sau đó, mình gán đoạn văn bản mà mình muốn chia sẻ vào thực thể DataPackage vừa tạo thông qua hàm SetText.

Share Text

Sau khi lựa chọn một Share Target app, người dùng sẽ thấy được nội dung văn bản muốn chia sẻ. Trong trường hợp này mình chọn Share Target app là Mail nên nội dung văn bản muốn chia sẻ sẽ nằm trong nội dung của email:

Share Text - Mail Share Target App

Chia sẻ đường dẫn trang web (web link)

Để chia sẻ web link, chúng ta chỉ cần thay đổi code xử lý trong hàm xử lý sự kiện OnDataRequested như sau:

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	Uri dataPackageUri = new Uri("ĐƯỜNG DẪN MUỐN CHIA SẺ");
    if (dataPackageUri != null)
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetWebLink(dataPackageUri);
	}
}

Khác với chia sẻ văn bản, để chia sẻ web link, các bạn chỉ cần truyền Uri của web link vào hàm SetWebLink của thực thể DataPackage.

Và đây là kết quả:

Chia sẻ đường dẫn ứng dụng (Application Link)

Tương tự như chia sẻ web link, để chia sẻ application link, các bạn chỉ cần truyền Uri của ứng dụng muốn chia sẻ vào một hàm và thay vì truyền vào hàm SetWebLink thì chúng ta cần truyền vào SetApplicationLink.

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	Uri dataPackageUri = new Uri("ĐƯỜNG DẪN ỨNG DỤNG MUỐN CHIA SẺ");
    if (dataPackageUri != null)
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetApplicationLink(dataPackageUri);
		
		requestData.Properties.Square30x30Logo = ; // TODO: Truyền vào stream logo ứng dụng
        requestData.Properties.LogoBackgroundColor = ; // TODO: Truyền vào màu nền logo ứng dụng
	}
}

Chia sẻ mã HTML

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	string dataPackageHtml = "MÃ HTML CẦN CHIA SẺ";
    if (!String.IsNullOrEmpty(dataPackageHtml))
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat(dataPackageHtml));
	}
}

Ở trong đoạn code trên các bạn có thể thấy mình sử dụng hàm SetHtmlFormat để chia sẻ nội dung HTML. Ngoài ra, mình có sử dụng hàm CreateHtmlFormat trong HtmlFormatHelper. Hàm CreateHtmlFormat này có tác dụng bọc nội dung HTML với các header và các thông tin khác mà hệ thống cần để có thể thực hiện chia sẻ.

Share HTML

Chia sẻ tập tin

Chia sẻ một hay nhiều tập tin đều được xử lý như nhau. Các bạn chỉ cần truyền danh sách các tập tin muốn chia sẻ vào một List<StorageFile> rồi truyền vào DataPackage thông qua hàm SetStorageItems.

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	IReadOnlyList<StorageFile> storageItems = ; // TODO: Gán danh sách tập tin muốn chia sẻ 
    if (storageItems != null)
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetStorageItems(storageItems);
	}
}

Chia sẻ hình ảnh

Để chia sẻ ảnh, chúng ta chỉ cần gán stream hình ảnh muốn chia sẻ vào DataPackage thông qua hàm SetBitmap.

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	IStorageFile imageFile = ; // TODO: Gán tập tin ảnh muốn chia sẻ 
    if (imageFile != null)
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        
		// Mình khuyên các bạn nên sử dụng cả hai hàm SetBitmap và SetStorageItems trong việc chia sẻ hình ảnh vì trong nhiều trường hợp,
		// các Share Target app chỉ hỗ trợ hoặc chỉ nhận chia sẻ ảnh hoặc chỉ nhận chia sẻ tập tin

        List<IStorageItem> imageItems = new List<IStorageItem>();
        imageItems.Add(imageFile);
        requestData.SetStorageItems(imageItems);

		RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromFile(imageFile);
        requestData.Properties.Thumbnail = imageStreamRef;
        requestData.SetBitmap(imageStreamRef);
	}
}

Ngoài ra, chia sẻ hình ảnh thực chất cũng là có thể hiểu là chia sẻ tập tin – tập tin hình ảnh, do vậy, mình khuyên các bạn nên thêm đoạn code chia sẻ tập tin vào trong đoạn code chia sẻ hình ảnh của các bạn. Vì sao mình khuyên các bạn làm như vậy, vì trong nhiều trường hợp, máy của người dùng không cài bất kỳ ứng dụng Share Target nào hỗ trợ nhận chia sẻ ảnh mà chỉ cài một số ứng dụng nhận chia sẻ tập tin như Mail. Thêm đoạn code chia sẻ tập tin sẽ giúp người dùng có thể lựa chọn chia sẻ thông qua các ứng dụng Share Target hỗ trợ chia sẻ tập tin trong trường hợp này thay vì không hiện lên ứng dụng Share Target nào cả.

Chia sẻ dữ liệu tùy biến

Ngoài những kiểu dữ liệu chuẩn được hỗ trợ ở trên, Windows 10 còn cho phép các ứng dụng có thể chia sẻ các dữ liệu tùy biến.

Để có thể chia sẻ dữ liệu tùy biến, các bạn cần phải thiết lập được một chuẩn dữ liệu để truyền vào DataPackageFormat. Việc thiết lập chuẩn dữ liệu này sẽ cần phải dựa trên một tiêu chuẩn nào đó để cho các ứng dụng Share Target có thể chấp nhận & hiểu được tiêu chuẩn này của bạn. Thông thường, việc chia sẻ dữ liệu tùy biến sẽ thường được sử dụng để chia sẻ dữ liệu giữa hai ứng dụng của bạn vì cùng dùng chung chuẩn dữ liệu của bạn. Tuy nhiên, nếu sử dụng một chuẩn dữ liệu phổ biến (như lấy theo chuẩn trên http://schema.org/ chẳng hạn) thì việc dữ liệu chia sẻ từ ứng dụng của bạn sẽ có nhiều ứng dụng Share Target hỗ trợ hơn.

Dưới đây là đoạn code chia sẻ dữ liệu tùy biến với chuẩn dữ liệu DataPackageFormat là http://schema.org/Book

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	string dataPackageText =
			@"{
               ""type"" : ""http://schema.org/Book"",
               ""properties"" :
               {
                ""image"" : ""http://localhost/lap-trinh-windows-10-book-cover.jpg"",
                ""name"" : ""Lập trình Windows 10"",
                ""bookFormat"" : ""http://schema.org/Paperback"",
                ""author"" : ""https://blog.lionpham.com"",
                ""numberOfPages"" : 91,
                ""publisher"" : ""Lion Phạm"",
                ""datePublished"" : ""2015-12-01"",
                ""inLanguage"" : ""Vietnamese"",
                ""isbn"" : ""0123456789""
                }
            }";
    if (!String.IsNullOrEmpty(dataPackageText))
	{
		DataPackage requestData = e.Request.Data;
        requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
        requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
        requestData.SetData("http://schema.org/Book", dataPackageText);
	}
}

Chia sẻ dữ liệu lớn

Chia sẻ dữ liệu lớn ở đây là gì? Mình định nghĩa dữ liệu lớn ở đây là dữ liệu có kích thước lớn hoặc dữ liệu cần nhiều thời gian để tải về (từ Internet hoặc từ ổ đĩa) hoặc để xử lý (giải nén, giải mã, mã hóa, …). Đặt một trường hợp là người dùng muốn chia sẻ một hình ảnh. Tuy nhiên vì lý do bản quyền bạn chỉ muốn chất lượng hình ảnh được chia sẻ giảm đi một nửa bằng cách giảm kích thước của ảnh được chia sẻ đi một nửa. Công việc thay đổi kích thước ảnh này mất tương đối thời gian. Vậy làm sao để xử lý “mượt” trong trường hợp này?

Dưới đây là đoạn code để xử lý trường hợp trên:

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	StorageFile imageFile = ; // TODO: Gán tập tin ảnh muốn chia sẻ 

	DataPackage requestData = e.Request.Data;
    requestData.Properties.Title = "TIÊU ĐỀ NỘI DUNG CHIA SẺ";
    requestData.Properties.Description = "MÔ TẢ NỘI DUNG CHIA SẺ"; // Không bắt buộc phải khai báo thuộc tính này.
    requestData.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(imageFile);
	requestData.SetDataProvider(StandardDataFormats.Bitmap, providerRequest => this.OnDeferredImageRequestedHandler(providerRequest, imageFile));
}

// Hàm này để xử lý giảm kích thước hình ảnh
private async void OnDeferredImageRequestedHandler(DataProviderRequest providerRequest, StorageFile imageFile)
{
    if (imageFile != null)
    {
		// Tạo mới một instance của DataProviderDeferral thông qua hàm GetDeferral
		// Bằng cách gọi hàm này, bạn đang gửi thông báo cho hệ thống là đoạn code xử lý
		// bên dưới sẽ tốn thời gian
        DataProviderDeferral deferral = providerRequest.GetDeferral();

        InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

        try
        {
            // Giảm chiều rộng và chiều dài của ảnh còn 50%
            IRandomAccessStream imageStream = await imageFile.OpenAsync(FileAccessMode.Read);
            BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(imageStream);
            BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
            imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
            imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
            await imageEncoder.FlushAsync();

			// Gán ảnh sau khi giảm kích thước vào dữ liệu chia sẻ thông qua hàm SetData
            providerRequest.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
        }
        finally
        {
			// Đảm bảo rằng luôn gọi hàm Complete khi thực hiện xong việc
            deferral.Complete();
        }
	}
}

Như các bạn thấy trong đoạn code trên, mình có gọi hàm GetDeferral của tham số DataProviderRequest. Hàm này trả về một thực thể DataProviderDeferral. Bằng cách gọi hàm này, mình đã thông báo với hệ thống rằng đoạn code bên dưới sẽ cần thời gian để xử lý. Như vậy, thay vì hiển thị lên giao diện chia sẻ của Share Target app mà người dùng chọn, hệ thống sẽ hiển thị lên một màn hình chờ của Share Target app đó. Trong trường hợp này mình chọn Share Target app là Mail nên màn hình chờ sẽ trông giống nhau sau:

Share Big Data

Các bạn lưu ý, nếu các bạn gọi hàm GetDeferral trên, hãy đảm bảo rằng các bạn gọi hàm Complete của thực thể DataProviderDeferral sau khi hoàn tất xử lý. Hàm Complete này sẽ thông báo với hệ thống rằng quá trình xử lý đã hoàn tất và hệ thống sẽ hiển thị giao diện chia sẻ của Share Target app mà người dùng chọn.

Hiển thị màn hình chia sẻ dữ liệu

Để hiển thị ra màn hình danh sách các ứng dụng Share Target, rất đơn giản, các bạn chỉ cần gọi đến hàm ShowShareUI của lớp DataTransferManager.

DataTransferManager.ShowShareUI();

Xử lý lỗi

Windows 10 cho phép bạn in một đoạn thông báo lỗi lên màn hình chia sẻ dữ liệu khi có lỗi phát sinh trong quá trình xử lý dữ liệu chia sẻ. Để làm được điều này, các bạn chỉ cần gọi đến hàm FailWithDisplayText trong thuộc tính Request trong tham số DataRequestedEventArgs của hàm xử lý sự kiện OnDataRequested.

// Khi mà ứng dụng nhận được yêu cầu chia sẻ dữ liệu, hàm này sẽ được gọi
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
	e.Request.FailWithDisplayText("THÔNG TIN LỖI CẦN IN RA MÀN HÌNH");
}

Share Target

Share Target app là những ứng dụng sẽ nhận nội dung chia sẻ từ ứng dụng khác và xử lý ứng dụng đấy theo nghiệp vụ của nó.

Để ứng dụng của bạn có thể nhận được nội dung chia sẻ từ ứng dụng khác, trước tiên các bạn cần vào thẻ Declarations trong tập tin Package.appmanifest

Sau đó, các bạn chọn Share Target trong mục Available Declarations rồi nhấn Add

Share Target

Tiếp theo, các bạn cần phải thiết lập kiểu dữ liệu nào mà ứng dụng của bạn hỗ trợ chia sẻ bằng cách nhấp chuột vào nút Add New trong phần Data formats rồi nhập tên kiểu dữ liệu mà bạn muốn hỗ trợ (ví dụ như Text).

Ngoài ra bạn cũng có thể thiết lập loại tập tin nào mà ứng dụng của bạn sẽ hỗ trợ chia sẻ bằng cách nhấp chuột vào nút Add New trong phần Supported file types rồi nhập tên phần mở rộng mà bạn muốn hỗ trợ (ví dụ như .txt).

Lưu ý: Các bạn cần nhập tên phần mở rộng bao gồm cả dấu chấm “.” đằng trước!

Nếu muốn hỗ trợ tất cả loại tập tin, các bạn chỉ cần nhấn vào hộp Supports any file type.

Share Target 2

Sau khi thiết lập xong trong tập tin Package.appmanifest, bước tiếp theo chúng ta cần làm đó là xử lý sự kiện khi dữ liệu chia sẻ được gửi đến. Đầu tiên, các bạn mở tập tin App.xaml.cs lên rồi sau đó override hàm OnShareTargetActivated.

// Override hàm này để xử lý khi có dữ liệu chia sẻ được gửi đến
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
	// Dữ liệu chia sẻ được lưu ở thuộc tính ShareOperation của tham số ShareTargetActivatedEventArgs
	ShareOperation shareOperation = args.ShareOperation;
	
	// Dữ liệu chia sẻ là Html
	if (shareOperation.Data.Contains(StandardDataFormats.Html))
	{
		var html = await shareOperation.Data.GetHtmlFormatAsync();
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường html;
	}
 
	// Dữ liệu chia sẻ là đường dẫn
	if (shareOperation.Data.Contains(StandardDataFormats.Uri))
	{
		var uri = await shareOperation.Data.GetUriAsync();
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường uri;
	}
 
	// Dữ liệu chia sẻ là văn bản
	if (shareOperation.Data.Contains(StandardDataFormats.Text))
	{
		var text = await shareOperation.Data.GetTextAsync();
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường text;
	}
	
	// Dữ liệu chia sẻ là tập tin
	if (shareOperation.Data.Contains(StandardDataFormats.StorageItems))
	{
		var storageItems = await shareOperation.Data.GetStorageItemsAsync();
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường storageItems;
	}
	
	// Dữ liệu chia sẻ là dữ liệu tùy biến
	var customDataFormat = "KIỂU DỮ LIỆU TÙY BIẾN";
	if (shareOperation.Data.Contains(customDataFormat))
	{
		var customData = await shareOperation.Data.GetTextAsync(customDataFormat);
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường customData;
	}
 
	// Dữ liệu chia sẻ là hình ảnh
	if (shareOperation.Data.Contains(StandardDataFormats.Bitmap))
	{
		var bitmapImage = await shareOperation.Data.GetBitmapAsync();
		// TODO: Xử lý logic chia sẻ dữ liệu ở đây dữ liệu lấy từ trường bitmapImage;
	}
}

Tổng kết

Như vậy là mình và các bạn đã cùng nhau tìm hiểu cơ chế chia sẻ dữ liệu trong Windows 10. Hy vọng với những thông tin mà mình chia sẻ ở trên, các bạn sẽ dễ dàng tích hợp được tính năng chia sẻ vào trong ứng dụng UWP của các bạn một cách nhanh chóng.

Các bạn có thể tải source code của project mình dùng để viết bài viết này tại đây.

Trong bài viết tiếp theo, mình và các bạn sẽ cùng nhau tìm hiểu cơ chế lưu trữ dữ liệu trong Windows 10.

Filed Under: Lập trình Windows 10 Tagged With: universal windows platform, windows, windows 10

Trả lời Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Tìm kiếm

Đăng ký nhận tin

Chuyên mục

  • Best Practice
  • DevOps
  • Microsoft Azure
  • Microsoft Student Partners
  • Programming
    • Lập trình Windows 10

Lưu trữ

  • Tháng Chín 2020 (2)
  • Tháng Ba 2018 (2)
  • Tháng Chín 2017 (1)
  • Tháng Tám 2017 (2)
  • Tháng Bảy 2017 (2)
  • Tháng Năm 2017 (1)
  • Tháng Hai 2017 (3)
  • Tháng Mười Một 2016 (1)
  • Tháng Chín 2016 (1)
  • Tháng Tám 2016 (6)
  • Tháng Hai 2016 (2)
  • Tháng Mười Hai 2015 (4)
  • Tháng Mười Một 2015 (1)
Xamarin Certified Mobile Developer