Partager via


Launcher

Browse sample. Parcourir l’exemple

Cet article explique comment utiliser l’interface utilisateur de l’application multiplateforme .NET (.NET MAUI). ILauncher Cette interface permet à une application d’ouvrir un URI par le système. Cette façon d’ouvrir une application est souvent utilisée lors de la liaison approfondie dans les schémas d’URI personnalisés d’une autre application.

L’implémentation par défaut de l’interface ILauncher est disponible via la Launcher.Default propriété. L’interface et Launcher la ILauncher classe sont contenues dans l’espace Microsoft.Maui.ApplicationModel de noms.

Important

Pour ouvrir le navigateur sur un site web, utilisez plutôt l’API Browser .

Démarrage

Pour accéder à la fonctionnalité du lanceur, la configuration spécifique à la plateforme suivante est requise.

Si vous souhaitez utiliser des liens approfondis pour ouvrir d’autres applications Android, vous devez définir un filtre d’intention dans votre application. Pour ce faire, ajoutez le code XML suivant au fichier Platforms/Android/AndroidManifest.xml :

<activity android:name="appName" android:exported="true">
    <intent-filter>
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.DEFAULT" />
       <category android:name="android.intent.category.BROWSABLE" />
       <data android:scheme="lyft"/>
       <data android:scheme="fb"/>
       </intent-filter>
</activity>

Les <data> éléments sont les schémas d’URI préinscrits auprès de votre application. Vous ne pouvez pas utiliser de schémas qui ne sont pas définis dans le filtre d’intention.

Pour rendre votre application extensible à partir d’autres applications, déclarez un <data> élément avec l’attribut android:scheme :

<data android:scheme="appName"/>

Ouvrir une autre application

Pour utiliser la fonctionnalité Lanceur, appelez la ILauncher.OpenAsync méthode et transmettez un String ou Uri représentant l’application à ouvrir. Si vous le souhaitez, la ILauncher.CanOpenAsync(Uri) méthode peut être utilisée pour case activée si le schéma d’URI peut être géré par une application sur l’appareil. Le code suivant montre comment case activée si un schéma d’URI est pris en charge ou non, puis ouvre l’URI :

bool supportsUri = await Launcher.Default.CanOpenAsync("lyft://");

if (supportsUri)
    await Launcher.Default.OpenAsync("lyft://ridetype?id=lyft_line");

L’exemple de code précédent peut être simplifié à l’aide du TryOpenAsync(Uri)case activée s si le schéma d’URI peut être ouvert, avant de l’ouvrir :

bool launcherOpened = await Launcher.Default.TryOpenAsync("lyft://ridetype?id=lyft_line");

if (launcherOpened)
{
    // Do something fun
}

Ouvrir une autre application via un fichier

Le lanceur peut également être utilisé pour ouvrir une application avec un fichier sélectionné. .NET MAUI détecte automatiquement le type de fichier (MIME) et ouvre l’application par défaut pour ce type de fichier. Si plusieurs applications sont inscrites auprès du type de fichier, une fenêtre contextuelle de sélection d’application s’affiche à l’utilisateur.

L’exemple de code suivant écrit du texte dans un fichier et ouvre le fichier texte avec le lanceur :

string popoverTitle = "Read text file";
string name = "File.txt";
string file = System.IO.Path.Combine(FileSystem.CacheDirectory, name);

System.IO.File.WriteAllText(file, "Hello World");

await Launcher.Default.OpenAsync(new OpenFileRequest(popoverTitle, new ReadOnlyFile(file)));

Définir l’emplacement du lanceur

Important

Cette section s’applique uniquement à iPadOS.

Lors de la demande d’un partage ou d’un lanceur d’ouverture sur iPadOS, vous pouvez le présenter dans une fenêtre contextuelle. 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 Rect(0, 20, 0, 0)
                                : Rect.Zero
    });
await Launcher.OpenAsync(new OpenFileRequest
    {
        File = new ReadOnlyFile(file),
        PresentationSourceBounds = DeviceInfo.Platform == DevicePlatform.iOS && DeviceInfo.Idiom == DeviceIdiom.Tablet
                                ? new Rect(0, 20, 0, 0)
                                : Rect.Zero
    });

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

Voici une méthode d’extension qui permet de calculer les limites d’une vue :

public static class ViewHelpers
{
    public static Rect GetAbsoluteBounds(this Microsoft.Maui.Controls.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 Microsoft.Maui.Controls.View v)
            {
                absoluteX += v.X + v.Margin.Top;
                absoluteY += v.Y + v.Margin.Left;
            }
        }

        return new Rect(absoluteX, absoluteY, element.Width, element.Height);
    }
}

Cela peut ensuite être utilisé lors de l’appel RequestAsync:

public Command<Microsoft.Maui.Controls.View> ShareCommand { get; } = new Command<Microsoft.Maui.Controls.View>(Share);

async void Share(Microsoft.Maui.Controls.View element)
{
    try
    {
        await Share.Default.RequestAsync(new ShareTextRequest
        {
            PresentationSourceBounds = element.GetAbsoluteBounds(),
            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}}"/>

Pour obtenir un exemple de classe ViewHelpers , consultez l’exemple .NET MAUI hébergé sur GitHub.

Différences de plateforme

Cette section décrit les différences spécifiques à la plateforme avec l’API du lanceur.

Retourné TaskCanOpenAsync immédiatement.