Xamarin.Essentials: Spouštěč

Třída spouštěče umožňuje aplikaci otevřít identifikátor URI systémem. To se často používá při přímém propojení do vlastních schémat identifikátorů URI jiné aplikace. Pokud chcete otevřít prohlížeč na webu, měli byste se podívat na rozhraní API prohlížeče .

Začínáme

Pokud chcete začít používat toto rozhraní API, přečtěte si příručku Začínáme pro, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.

Pomocí spouštěče

Do třídy přidejte odkaz Xamarin.Essentials :

using Xamarin.Essentials;

Chcete-li použít funkci spouštěče, zavolejte OpenAsync metodu a předejte string nebo Uri pro otevření. Volitelně CanOpenAsync lze metodu použít ke kontrole, zda lze schématu identifikátoru URI zpracovat aplikací na zařízení.

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

To lze zkombinovat do jednoho volání s TryOpenAsync , které kontroluje, zda lze parametr otevřít, a pokud jej otevřete.

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

Nastavení dalších platforem

Žádné další nastavení.

Soubory

Tato funkce umožňuje aplikaci požádat o otevření a zobrazení souboru další aplikace. Xamarin.Essentials automaticky rozpozná typ souboru (MIME) a vyžádá si soubor, který se má otevřít.

Tady je ukázka zápisu textu na disk a vyžádání jeho otevření:

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)
});

Umístění prezentace při otevírání souborů

Při žádosti o sdílení nebo otevření spouštěče na iPadOS máte možnost prezentovat ovládací prvek pop. To určuje, kde se zobrazí automaticky otevírané okno a nasměruje šipku přímo na. Toto umístění je často ovládací prvek, který spustil akci. Umístění můžete zadat pomocí PresentationSourceBounds vlastnosti:

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
});

Všechno popsané tady funguje stejně jako pro Share a Launcher .

Pokud používáte Xamarin.Forms , můžete předat View a vypočítat hranice:

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);
}

To se pak dá použít při volání 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
    }
}

Můžete předat volání elementu při Command aktivaci:

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

Rozdíly platformy

Úloha vrácená z CanOpenAsync okamžitého dokončení.

rozhraní API

Další videa Xamarin najdete na webu Channel 9 a YouTube.