Berbagi data

Artikel ini menjelaskan cara mendukung kontrak Berbagi di desktop atau aplikasi Platform Windows Universal (UWP). Kontrak Berbagi adalah cara mudah untuk berbagi data dengan cepat—seperti teks, tautan, foto, dan video—antar aplikasi. Misalnya, pengguna mungkin ingin berbagi halaman web dengan teman mereka menggunakan aplikasi jejaring sosial, atau menyimpan tautan di aplikasi catatan untuk dirujuk nanti.

Catatan

Contoh kode dalam artikel ini berasal dari aplikasi UWP. Aplikasi desktop harus menggunakan IDataTransferManagerInterop. Untuk informasi selengkapnya, dan contoh kode, lihat Menampilkan objek UI WinRT yang bergantung pada CoreWindow. Lihat juga sampel aplikasi sumber konten Berbagi WPF.

Menyiapkan penanganan aktivitas

Tambahkan penanganan aktivitas DataRequested untuk dipanggil setiap kali pengguna memanggil berbagi. Ini dapat terjadi baik saat pengguna mengetuk kontrol di aplikasi Anda (seperti tombol atau perintah bilah aplikasi) atau secara otomatis dalam skenario tertentu (jika pengguna menyelesaikan level dan mendapatkan skor tinggi, misalnya).

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;

Saat peristiwa DataRequested terjadi, aplikasi Anda menerima objek DataRequest. Ini berisi DataPackage yang dapat Anda gunakan untuk menyediakan konten yang ingin dibagikan pengguna. Anda harus memberikan judul dan data untuk dibagikan. Deskripsi bersifat opsional, tetapi disarankan.

DataRequest request = args.Request;

Pilih data

Anda dapat berbagi berbagai jenis data, termasuk:

  • Teks biasa
  • Pengidentifikasi Sumber Daya Seragam (URI)
  • HTML
  • Teks yang diformat
  • Bitmap
  • File
  • Data kustom yang ditentukan pengembang

Objek DataPackage dapat berisi satu atau beberapa format ini, dalam kombinasi apa pun. Contoh berikut menunjukkan berbagi teks.

request.Data.SetText("Hello world!");

Mengatur properti

Saat mengemas data untuk dibagikan, Anda dapat menyediakan berbagai properti yang menyediakan informasi tambahan tentang konten yang dibagikan. Properti ini membantu menargetkan aplikasi meningkatkan pengalaman pengguna. Misalnya, deskripsi membantu saat pengguna berbagi konten dengan lebih dari satu aplikasi. Menambahkan gambar mini saat berbagi gambar atau tautan ke halaman web memberikan referensi visual kepada pengguna. Untuk informasi selengkapnya, lihat DataPackagePropertySet.

Peringatan

Semua properti kecuali judul bersifat opsional. Properti judul wajib dan harus diatur.

request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";

Meluncurkan UI berbagi

UI untuk berbagi disediakan oleh sistem. Untuk meluncurkannya, panggil metode ShowShareUI.

DataTransferManager.ShowShareUI();

Menangani kesalahan

Dalam kebanyakan kasus, berbagi konten adalah proses yang mudah. Namun, selalu ada kemungkinan sesuatu yang tidak terduga bisa terjadi. Misalnya, aplikasi mungkin mengharuskan pengguna untuk memilih konten untuk dibagikan tetapi pengguna tidak memilih apa pun. Untuk menangani situasi ini, gunakan metode FailWithDisplayText , yang akan menampilkan pesan kepada pengguna jika terjadi kesalahan.

Tunda berbagi dengan delegasi

Terkadang, mungkin tidak masuk akal untuk segera menyiapkan data yang ingin dibagikan pengguna. Misalnya, jika aplikasi Anda mendukung pengiriman file gambar besar dalam beberapa format yang berbeda, tidak efisien untuk membuat semua gambar tersebut sebelum pengguna membuat pilihan mereka.

Untuk mengatasi masalah ini, DataPackage dapat berisi delegasi — fungsi yang dipanggil saat aplikasi penerima meminta data. Sebaiknya gunakan delegasi kapan saja bahwa data yang ingin dibagikan pengguna intensif sumber daya.

async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
    // Provide updated bitmap data using delayed rendering
    if (this.imageStream != null)
    {
        DataProviderDeferral deferral = request.GetDeferral();
        InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

        // Decode the image.
        BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

        // Re-encode the image at 50% width and height.
        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();

        request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
        deferral.Complete();
    }
}

Baca juga