Partager via


Xamarin.Essentials:Lanceur

La classe Lanceur permet à une application d’ouvrir un URI par le système. Elle est souvent utilisée en cas de lien profond avec les schémas d’URI personnalisés d’une autre application. Si vous souhaitez ouvrir le navigateur sur un site web, reportez-vous à l’API Navigateur.

Démarrage

Pour commencer à utiliser cette API, lisez le guide de prise en main pour Xamarin.Essentials vous assurer que la bibliothèque est correctement installée et configurée dans vos projets.

Utilisation de Lanceur

Ajoutez une référence à Xamarin.Essentials votre classe :

using Xamarin.Essentials;

Pour utiliser la fonctionnalité Lanceur, appelez la méthode OpenAsync et passez un string ou Uri pour l’ouvrir. Si vous le souhaitez, vous pouvez aussi utiliser la méthode CanOpenAsync pour vérifier si le schéma d’URI peut être géré par une application sur l’appareil.

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

Cette méthode peut être combinée en un seul appel à TryOpenAsync, qui vérifie si le paramètre peut être ouvert et, le cas échéant, l’ouvre.

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

Configuration supplémentaire de la plateforme

Aucune configuration supplémentaire.

Fichiers

Cette fonctionnalité permet à une application de demander à d’autres applications d’ouvrir et d’afficher un fichier. Xamarin.Essentials détecte automatiquement le type de fichier (MIME) et demande l’ouverture du fichier.

Voici un exemple d’écriture de texte sur disque et de demande d’ouverture :

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

Emplacement de présentation lors de l’ouverture de fichiers

Lorsque vous demandez un partage ou ouvrez un lanceur sur iPadOS, vous avez la possibilité de présenter dans un contrôle contextuel. Cela spécifie où la fenêtre contextuelle s’affiche et pointe directement vers une flèche. Cet emplacement est souvent le contrôle qui a lancé l’action. Vous pouvez spécifier l’emplacement à l'aide de la propriété 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
});

Tout ce qui est décrit ici fonctionne de manière égale pour Share et Launcher.

Si vous utilisez Xamarin.Forms vous pouvez transmettre une View limite et calculer les limites :

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

Cela peut ensuite être utilisé lors de l’appel 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
    }
}

Vous pouvez transmettre l’élément appelant lorsque l’élément Command est déclenché :

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

Différences entre les plateformes

La tâche retournée à partir de CanOpenAsync se termine immédiatement.

API

Retrouvez d’autres vidéos Xamarin sur Channel 9 et YouTube.