Share via


Xamarin.Essentials:Paylaş

Share sınıfı, bir uygulamanın metin ve web bağlantıları gibi verileri cihazdaki diğer uygulamalara paylaşmasını sağlar.

Kullanmaya başlayın

Bu API'yi kullanmaya başlamak için kitaplığın projelerinizde düzgün yüklendiğinden ve ayarlandığından emin olmak için Xamarin.Essentials kullanmaya başlama kılavuzunu okuyun.

Ek kurulum gerekmez.

Paylaşımı Kullanma

Sınıfınızda için Xamarin.Essentials bir başvuru ekleyin:

using Xamarin.Essentials;

Paylaş işlevi, yöntemini diğer uygulamalarla paylaşacak bilgileri içeren bir veri isteği yüküyle çağırarak RequestAsync çalışır. Metin ve Uri karıştırılabilir ve her platform içeriğe göre filtrelemeyi işler.


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şacak kullanıcı arabirimi:

Share to external application UI

Dosya

Bu özellikler, bir uygulamanın cihazdaki diğer uygulamalarla dosya paylaşmasına olanak tanır. Xamarin.Essentials dosya türünü (MIME) otomatik olarak algılar ve bir paylaşım ister. Her platform yalnızca belirli dosya uzantılarını destekleyemeyebilir.

Diske metin yazma ve diğer uygulamalarla paylaşma örneği aşağıda 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şmanın kullanımı, tek dosyadan yalnızca aynı anda birkaç dosya gönderme özelliğinden 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) }
});

Sunu Konumu

iPadOS'ta paylaşım isteğinde bulunurken veya başlatıcıyı açarken, denetim üzerinde bir açılır pencerede sunum yapma olanağınız vardır. Bu, açılır tuşlarına basılacak konumu belirtir ve bir oku doğrudan işaret eder. Bu konum genellikle eylemi başlatan denetimdir. Özelliğini kullanarak PresentationSourceBounds konumu belirtebilirsiniz:

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 Launcheriçin Share eşit şekilde çalışır.

Kullanıyorsanız Xamarin.Forms , bir View geçirip sınırları 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 RequestAsynckullanılabilir:

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 Command çağıran öğesini geçirebilirsiniz:

<Button Text="Share"
        Command="{Binding ShareWithFriendsCommand}"
        CommandParameter="{Binding Source={RelativeSource Self}}"/>

Platform Farkları

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

API

Channel 9 ve YouTube'da daha fazla Xamarin videosu bulun.