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