Aracılığıyla paylaş


Xamarin.Essentials:Başlatıcısı

Launcher sınıfı, bir uygulamanın sistem tarafından bir URI açmasına olanak tanır. Bu genellikle başka bir uygulamanın özel URI düzenlerine ayrıntılı bağlantı sağlarken kullanılır. Tarayıcıyı bir web sitesine açmak istiyorsanız Tarayıcı API'sine başvurmanız gerekir.

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.

Başlatıcıyı Kullanma

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

using Xamarin.Essentials;

Launcher işlevini kullanmak için yöntemini çağırın OpenAsync ve veya'yı stringUri geçirerek açın. İsteğe bağlı olarak, URI şemasının CanOpenAsync cihazdaki bir uygulama tarafından işlenip işlenmediğini denetlemek için yöntemi kullanılabilir.

public class LauncherTest
{
    public async Task OpenRideShareAsync()
    {
        var supportsUri = await Launcher.CanOpenAsync("lyft://");
        if (supportsUri)
            await Launcher.OpenAsync("lyft://ridetype?id=lyft_line");
    }
}

Bu, parametresinin açılıp açılamadığını ve açılıp açılmayabileceğini denetleyen ile TryOpenAsynctek bir çağrıda birleştirilebilir.

public class LauncherTest
{
    public async Task<bool> OpenRideShareAsync()
    {
        return await Launcher.TryOpenAsync("lyft://ridetype?id=lyft_line");
    }
}

Ek Platform Kurulumu

Ek kurulum yok.

Dosyalar

Bu özellikler, bir uygulamanın diğer uygulamaların bir dosyayı açmasını ve görüntülemesini istemesini sağlar. Xamarin.Essentials dosya türünü (MIME) otomatik olarak algılar ve dosyanın açılmasını ister.

Diske metin yazma ve açılmasını isteme örneği aşağıda verilmiştir:

var fn = "File.txt";
var file = Path.Combine(FileSystem.CacheDirectory, fn);
File.WriteAllText(file, "Hello World");

await Launcher.OpenAsync(new OpenFileRequest
{
    File = new ReadOnlyFile(file)
});

Dosyaları Açarken 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ı

'den CanOpenAsync döndürülen Görev hemen tamamlar.

API

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