Xamarin.Essentials: Paylaşma
Share sınıfı, bir uygulamanın cihazdaki diğer uygulamalara metin ve Web bağlantıları gibi verileri paylaşmasını sağlar.
başlarken
Bu API 'yi kullanmaya başlamak için, kitaplığın projelerinizde düzgün bir şekilde yüklendiğinden ve ayarlandığından emin olmak için Başlarken Kılavuzunu okuyun.
Paylaşma kullanma
Sınıfınıza bir başvuru ekleyin Xamarin.Essentials :
using Xamarin.Essentials;
Paylaşma işlevi, RequestAsync yöntemi diğer uygulamalarla paylaşılacak bilgileri içeren bir veri isteği yüküne çağırarak işe yarar. Metin ve URI karışık olabilir ve her platform içeriğe göre filtrelemeyi işleymeyecektir.
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"
});
}
}
İstek yapıldığında görüntülenen dış uygulamayla paylaşılacak Kullanıcı arabirimi:

Dosya
Bu özellikler, bir uygulamanın cihazdaki diğer uygulamalarla dosya paylaşmasını sağlar. Xamarin.Essentials dosya türü (MIME) otomatik olarak algılanır ve bir paylaşma ister. Her platform yalnızca belirli dosya uzantılarını destekleyebilir.
Aşağıda, diske metin yazma ve diğer uygulamalarla paylaşma örnekleri verilmiştir:
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)
});
Birden çok dosya
Birden çok dosya paylaşımının kullanımı, tek dosyadan farklı dosya gönderme imkanındaki tek dosyadan farklıdır:
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) }
});
Sunum konumu
Idos üzerinde bir paylaşma veya açma başlatıcısı isteğinde bulunduğunda, bir pop denetimi üzerinde sunma olanağınız vardır. Bu, pop 'un nereden görüneceğini ve doğrudan bir ok işaret olacağını belirtir. Bu konum genellikle eylemi başlatan denetimdir. Özelliğini kullanarak konumu belirtebilirsiniz PresentationSourceBounds :
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
});
Burada açıklanan her şey ve için eşit olarak çalışmaktadır ShareLauncher .
Kullanıyorsanız, Xamarin.Forms bir View ve sınırlarını hesaplayabilirsiniz:
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);
}
Bu, daha sonra çağrılırken kullanılabilir 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
}
}
Tetiklendiğinde çağırma öğesini geçirebilirsiniz Command :
<Button Text="Share"
Command="{Binding ShareWithFriendsCommand}"
CommandParameter="{Binding Source={RelativeSource Self}}"/>