Bagikan melalui


Xamarin.Essentials:Launcher

Kelas Peluncur memungkinkan aplikasi untuk membuka URI oleh sistem. Ini sering digunakan ketika penautan mendalam ke skema URI kustom aplikasi lain. Jika Anda ingin membuka browser ke situs web maka Anda harus merujuk ke BROWSER API.

Memulai

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

Menggunakan Launcher

Tambahkan referensi ke Xamarin.Essentials di kelas Anda:

using Xamarin.Essentials;

Untuk menggunakan fungsionalitas Peluncur, panggil OpenAsync metode dan teruskan string atau Uri untuk membuka. Secara opsional, CanOpenAsync metode ini dapat digunakan untuk memeriksa apakah skema URI dapat ditangani oleh aplikasi pada perangkat.

public class LauncherTest
{
    public async Task OpenRideShareAsync()
    {
        var supportsUri = await Launcher.CanOpenAsync("lyft://");
        if (supportsUri)
            await Launcher.OpenAsync("lyft://ridetype?id=lyft_line");
    }
}

Ini dapat digabungkan ke dalam satu panggilan dengan TryOpenAsync, yang memeriksa apakah parameter dapat dibuka dan jika demikian buka.

public class LauncherTest
{
    public async Task<bool> OpenRideShareAsync()
    {
        return await Launcher.TryOpenAsync("lyft://ridetype?id=lyft_line");
    }
}

Penyiapan Platform Tambahan

Tidak ada penyiapan tambahan.

File

Fitur ini memungkinkan aplikasi untuk meminta aplikasi lain membuka dan melihat file. Xamarin.Essentials akan secara otomatis mendeteksi jenis file (MIME) dan meminta file dibuka.

Berikut adalah sampel penulisan teks ke disk dan memintanya dibuka:

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

await Launcher.OpenAsync(new OpenFileRequest
{
    File = new ReadOnlyFile(file)
});

Lokasi Presentasi Saat Membuka File

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

Tugas yang dikembalikan dari CanOpenAsync selesai segera.

API

Temukan video Xamarin lainnya di Channel 9 dan YouTube.