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.

Ek kurulum gerekmez.

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:

Dış uygulama kullanıcı arabirimine paylaşma

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

Platform farkları

  • Subject özelliği, bir iletinin istenen konusu için kullanılır.

API

Channel 9 ve YouTube'da daha fazla Xamarin videoları bulun.