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
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}}"/>