Bagikan melalui


Xamarin.Essentials:Berbagi

Kelas Berbagi memungkinkan aplikasi berbagi data seperti tautan teks dan web ke aplikasi lain di perangkat.

Memulai

Untuk mulai menggunakan API ini, baca panduan memulai untuk Xamarin.Essentials memastikan pustaka diinstal dan disiapkan dengan benar di proyek Anda.

Tidak diperlukan penyiapan tambahan.

Menggunakan Berbagi

Tambahkan referensi ke Xamarin.Essentials di kelas Anda:

using Xamarin.Essentials;

Fungsionalitas Berbagi berfungsi dengan memanggil RequestAsync metode dengan payload permintaan data yang menyertakan informasi untuk dibagikan ke aplikasi lain. Teks dan Uri dapat dicampur dan setiap platform akan menangani pemfilteran berdasarkan konten.


public class ShareTest
{
    public async Task ShareText(string text)
    {
        await Share.RequestAsync(new ShareTextRequest
            {
                Text = text,
                Title = "Share Text"
            });
    }

    public async Task ShareUri(string uri)
    {
        await Share.RequestAsync(new ShareTextRequest
            {
                Uri = uri,
                Title = "Share Web Link"
            });
    }
}

Antarmuka pengguna untuk dibagikan ke aplikasi eksternal yang muncul saat permintaan dibuat:

Share to external application UI

File

Fitur ini memungkinkan aplikasi berbagi file ke aplikasi lain di perangkat. Xamarin.Essentials akan secara otomatis mendeteksi jenis file (MIME) dan meminta berbagi. Setiap platform hanya dapat mendukung ekstensi file tertentu.

Berikut adalah sampel penulisan teks ke disk dan membagikannya ke aplikasi lain:

var fn =  "Attachment.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");

await Share.RequestAsync(new ShareFileRequest
{
    Title = Title,
    File = new ShareFile(file)
});

Beberapa File

Penggunaan berbagi beberapa file berbeda dari satu file hanya dalam kemampuan mengirim beberapa file sekaligus:

var file1 = Path.Combine(FileSystem.CacheDirectory, "Attachment1.txt");
File.WriteAllText(file, "Content 1");
var file2 = Path.Combine(FileSystem.CacheDirectory, "Attachment2.txt");
File.WriteAllText(file, "Content 2");

await Share.RequestAsync(new ShareMultipleFilesRequest
{
    Title = ShareFilesTitle,
    Files = new List<ShareFile> { new ShareFile(file1), new ShareFile(file2) }
});

Lokasi Presentasi

Saat meminta berbagi atau membuka peluncur di iPadOS, Anda memiliki kemampuan untuk hadir dalam kontrol pop over. Ini menentukan tempat pop over akan muncul dan mengarahkan panah langsung ke. Lokasi ini sering menjadi kontrol yang meluncurkan tindakan. Anda dapat menentukan lokasi menggunakan PresentationSourceBounds properti :

await Share.RequestAsync(new ShareFileRequest
{
    Title = Title,
    File = new ShareFile(file),
    PresentationSourceBounds = DeviceInfo.Platform== DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                            ? new System.Drawing.Rectangle(0, 20, 0, 0)
                            : System.Drawing.Rectangle.Empty
});
await Launcher.OpenAsync(new OpenFileRequest
{
    File = new ReadOnlyFile(file),
    PresentationSourceBounds = DeviceInfo.Platform== DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                            ? new System.Drawing.Rectangle(0, 20, 0, 0)
                            : System.Drawing.Rectangle.Empty
});

Semua yang dijelaskan di sini berfungsi sama untuk Share dan Launcher.

Jika Anda menggunakan Xamarin.Forms , Anda dapat meneruskan View dan menghitung batas:

public static class ViewHelpers
{
    public static Rectangle GetAbsoluteBounds(this Xamarin.Forms.View element)
    {
        Element looper = element;

        var absoluteX = element.X + element.Margin.Top;
        var absoluteY = element.Y + element.Margin.Left;

        // Add logic to handle titles, headers, or other non-view bars

        while (looper.Parent != null)
        {
            looper = looper.Parent;
            if (looper is Xamarin.Forms.View v)
            {
                absoluteX += v.X + v.Margin.Top;
                absoluteY += v.Y + v.Margin.Left;
            }
        }

        return new Rectangle(absoluteX, absoluteY, element.Width, element.Height);
    }

    public static System.Drawing.Rectangle ToSystemRectangle(this Rectangle rect) =>
        new System.Drawing.Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
}

Ini kemudian dapat digunakan saat memanggil RequestAsync:

public Command<Xamarin.Forms.View> ShareCommand { get; } = new Command<Xamarin.Forms.View>(Share);
async void Share(Xamarin.Forms.View element)
{
    try
    {
        Analytics.TrackEvent("ShareWithFriends");
        var bounds = element.GetAbsoluteBounds();

        await Share.RequestAsync(new ShareTextRequest
        {
            PresentationSourceBounds = bounds.ToSystemRectangle(),
            Title = "Title",
            Text = "Text"
        });
    }
    catch (Exception)
    {
        // Handle exception that share failed
    }
}

Anda dapat meneruskan elemen panggilan saat Command dipicu:

<Button Text="Share"
        Command="{Binding ShareWithFriendsCommand}"
        CommandParameter="{Binding Source={RelativeSource Self}}"/>

Perbedaan Platform

  • Subject properti digunakan untuk subjek pesan yang diinginkan.

API

Temukan video Xamarin lainnya di Channel 9 dan YouTube.