Launcher
Artikel ini menjelaskan cara menggunakan antarmuka .NET Multi-platform App UI (.NET MAUI). ILauncher Antarmuka ini memungkinkan aplikasi untuk membuka URI oleh sistem. Cara membuka aplikasi ini sering digunakan saat menautkan secara mendalam ke skema URI kustom aplikasi lain.
Implementasi ILauncher
default antarmuka tersedia melalui Launcher.Default properti . ILauncher
Antarmuka dan Launcher
kelas terkandung dalam Microsoft.Maui.ApplicationModel
namespace layanan.
Penting
Untuk membuka browser ke situs web, gunakan BROWSER API sebagai gantinya.
Mulai
Untuk mengakses fungsionalitas peluncur, diperlukan penyiapan khusus platform berikut.
Jika Anda ingin menggunakan tautan mendalam untuk membuka aplikasi Android lainnya, Anda harus menentukan filter niat di aplikasi Anda. Ini dapat dicapai dengan menambahkan XML berikut ke file Platforms/Android/AndroidManifest.xml :
<activity android:name="appName" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="lyft"/>
<data android:scheme="fb"/>
</intent-filter>
</activity>
Elemen adalah <data>
skema URI yang telah didaftarkan sebelumnya dengan aplikasi Anda. Anda tidak dapat menggunakan skema yang tidak ditentukan dalam filter niat.
Untuk membuat aplikasi Anda dapat dijelajahi dari aplikasi lain, deklarasikan <data>
elemen dengan android:scheme
atribut :
<data android:scheme="appName"/>
Buka aplikasi lain
Untuk menggunakan fungsionalitas Peluncur, panggil ILauncher.OpenAsync metode dan teruskan String atau Uri mewakili aplikasi untuk dibuka. Secara opsional, ILauncher.CanOpenAsync(Uri) metode ini dapat digunakan untuk memeriksa apakah skema URI dapat ditangani oleh aplikasi di perangkat. Kode berikut menunjukkan cara memeriksa apakah skema URI didukung atau tidak, lalu membuka URI:
bool supportsUri = await Launcher.Default.CanOpenAsync("lyft://");
if (supportsUri)
await Launcher.Default.OpenAsync("lyft://ridetype?id=lyft_line");
Contoh kode sebelumnya dapat disederhanakan dengan menggunakan TryOpenAsync(Uri), yang memeriksa apakah skema URI dapat dibuka, sebelum membukanya:
bool launcherOpened = await Launcher.Default.TryOpenAsync("lyft://ridetype?id=lyft_line");
if (launcherOpened)
{
// Do something fun
}
Membuka aplikasi lain melalui file
Peluncur juga dapat digunakan untuk membuka aplikasi dengan file yang dipilih. .NET MAUI secara otomatis mendeteksi jenis file (MIME), dan membuka aplikasi default untuk jenis file tersebut. Jika lebih dari satu aplikasi terdaftar dengan jenis file, popover pilihan aplikasi ditampilkan kepada pengguna.
Contoh kode berikut menulis teks ke file, dan membuka file teks dengan peluncur:
string popoverTitle = "Read text file";
string name = "File.txt";
string file = System.IO.Path.Combine(FileSystem.CacheDirectory, name);
System.IO.File.WriteAllText(file, "Hello World");
await Launcher.Default.OpenAsync(new OpenFileRequest(popoverTitle, new ReadOnlyFile(file)));
Mengatur lokasi peluncur
Penting
Bagian ini hanya berlaku untuk iPadOS.
Saat meminta peluncur berbagi atau pembukaan di iPadOS, Anda dapat menyajikannya di popover. Ini menentukan tempat popover 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 Rect(0, 20, 0, 0)
: Rect.Zero
});
await Launcher.OpenAsync(new OpenFileRequest
{
File = new ReadOnlyFile(file),
PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
? new Rect(0, 20, 0, 0)
: Rect.Zero
});
Semua yang dijelaskan di sini berfungsi sama untuk Share dan Launcher.
Berikut adalah metode ekstensi yang membantu menghitung batas tampilan:
public static class ViewHelpers
{
public static Rect GetAbsoluteBounds(this Microsoft.Maui.Controls.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 Microsoft.Maui.Controls.View v)
{
absoluteX += v.X + v.Margin.Top;
absoluteY += v.Y + v.Margin.Left;
}
}
return new Rect(absoluteX, absoluteY, element.Width, element.Height);
}
}
Ini kemudian dapat digunakan saat memanggil RequestAsync:
public Command<Microsoft.Maui.Controls.View> ShareCommand { get; } = new Command<Microsoft.Maui.Controls.View>(Share);
async void Share(Microsoft.Maui.Controls.View element)
{
try
{
await Share.Default.RequestAsync(new ShareTextRequest
{
PresentationSourceBounds = element.GetAbsoluteBounds(),
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}}"/>
Untuk contoh ViewHelpers
kelas, lihat Sampel .NET MAUI yang dihosting di GitHub.
Perbedaan platform
Bagian ini menjelaskan perbedaan khusus platform dengan API peluncur.
Yang Task dikembalikan dari CanOpenAsync selesai segera.