Recevoir des données partagées dans votre application Windows

Le contrat de partage Windows permet à votre application d’apparaître dans la feuille de partage Windows en tant qu’application cible, ce qui permet aux utilisateurs de partager du contenu à partir d’autres applications directement dans le vôtre. Cet article explique comment gérer le contenu partagé une fois que votre application est activée en tant que cible de partage.

Avant de suivre les étapes ci-dessous, inscrivez votre application en tant que cible de partage :

Note

Le modèle d’activation pour les applications de bureau WinUI 3 diffère de UWP. Dans WinUI 3, l’activation de partage est gérée via AppInstance.GetActivatedEventArgs() le code de démarrage de votre application, et non via Application.OnShareTargetActivated(). Les API ShareOperation et DataPackageView décrites dans cet article fonctionnent de la même manière une fois que vous avez obtenu le ShareTargetActivatedEventArgs. Consultez Intégrer des applications empaquetées à Windows Partager pour le modèle d’activation SDK d'application Windows.

Choisir des formats de données à prendre en charge

Lorsque vous déclarez votre application en tant que cible de partage dans son manifeste de package, vous spécifiez les types de fichiers et les formats de données que votre application peut recevoir. Seules les applications qui prennent en charge les formats partagés apparaissent dans la feuille De partage.

Vous pouvez configurer des types pris en charge de deux façons :

Utilisation de l’éditeur de manifeste Visual Studio :

  1. Ouvrez package.appxmanifest dans Visual Studio.
  2. Sélectionnez l’onglet Déclarations .
  3. Choisissez Partager la cible dans la liste Déclarations disponibles , puis sélectionnez Ajouter.
  4. Sous Types de fichiers pris en charge, ajoutez les extensions de fichier gérées par votre application (par exemple, .jpg, .png). Sélectionnez SupportsAnyFileType pour accepter tous les types de fichiers.
  5. Sous Formats de données, ajoutez les noms de format gérés par votre application (par exemple, Text, Uri, Bitmap).

Directement dans le fichier XML du manifeste :

<Extensions>
  <uap:Extension Category="windows.shareTarget">
    <uap:ShareTarget>
      <uap:SupportedFileTypes>
        <uap:SupportsAnyFileType />
      </uap:SupportedFileTypes>
      <uap:DataFormat>Text</uap:DataFormat>
      <uap:DataFormat>Uri</uap:DataFormat>
      <uap:DataFormat>Bitmap</uap:DataFormat>
      <uap:DataFormat>StorageItems</uap:DataFormat>
    </uap:ShareTarget>
  </uap:Extension>
</Extensions>

Inscrivez-vous uniquement aux formats que votre application peut gérer. Si vous déclarez un format mais que vous ne pouvez pas le traiter, l’expérience utilisateur souffre.

Lire les données partagées

Lorsque votre application est activée en tant que cible de partage, vous recevez un objet ShareOperation via le ShareTargetActivatedEventArgs. Sa Data propriété est un DataPackageView qui expose le contenu partagé.

Permet Contains de vérifier les formats disponibles, puis d’appeler la méthode asynchrone appropriée pour récupérer les données :

ShareOperation shareOperation = args.ShareOperation;

if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();
    // Process the shared text.
}

if (shareOperation.Data.Contains(StandardDataFormats.WebLink))
{
    Uri webLink = await shareOperation.Data.GetWebLinkAsync();
    // Process the shared link.
}

if (shareOperation.Data.Contains(StandardDataFormats.StorageItems))
{
    IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
    // Process the shared files or folders.
}

État du partage de rapports

Si le traitement des données partagées prend du temps( par exemple, le chargement de fichiers sur un serveur) signale la progression au système à l’aide des méthodes d’état ShareOperation . Cela permet au système de gérer le cycle de vie de l’application source de manière appropriée.

Appelez ces méthodes dans l’ordre à mesure que votre opération de partage progresse :

Method Quand appeler
ReportStarted Dès que votre application commence à traiter le partage. Après ce point, n’attendez pas d’autres interactions utilisateur avec l’interface utilisateur de partage.
ReportDataRetrieved Une fois que votre application a obtenu toutes les données dont elle a besoin à partir du DataPackageView. Cela permet au système de suspendre ou de mettre fin à l’application source.
ReportSubmittedBackgroundTask Si votre application continue à s’exécuter en arrière-plan une fois l’interface de partage fermée.
ReportCompleted Une fois que votre application a terminé de traiter le contenu partagé.
ReportError Si une erreur grave se produit. L’utilisateur voit le message et l’opération de partage se termine.
shareOperation.ReportStarted();

try
{
    string text = await shareOperation.Data.GetTextAsync();
    shareOperation.ReportDataRetrieved();

    // Perform any additional processing here...
    await ProcessSharedDataAsync(text);

    shareOperation.ReportCompleted();
}
catch (Exception)
{
    shareOperation.ReportError("Something went wrong. Please try again.");
}

Note

N’appelez ReportError que pour des erreurs suffisamment graves pour mettre un terme à l’opération de partage. Pour les erreurs récupérables, vous pouvez continuer le traitement sans appeler ReportError.

Note

Il existe des cas où une application cible peut appeler ReportDataRetrieved avant ReportStarted: par exemple, si votre application récupère des données dans le cadre de la gestion de l’activation, mais uniquement les appels ReportStarted plus tard lorsque l’utilisateur sélectionne explicitement un bouton Partager .

Lorsqu’un utilisateur partage du contenu à votre application, vous pouvez renvoyer un QuickLink pour accélérer le partage futur. Un QuickLink raccourci apparaît dans la feuille De partage, par exemple un raccourci de contact qui permet à l’utilisateur de partager rapidement avec ce contact sans naviguer dans l’interface utilisateur de votre application.

A QuickLink a un titre, une icône et un ID. L’ID est l’identificateur interne de votre application pour le raccourci, tel qu’un ID de contact ou un nom de compte. Lorsque l’utilisateur sélectionne ultérieurement un QuickLink, le système active votre application et transmet l’ID QuickLink via ShareOperation.QuickLinkId.

Renvoyez un QuickLink en le transmettant à ReportCompleted :

private async Task ReportCompletedWithQuickLink(
    ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // QuickLink supported types are configured independently from the manifest.
        SupportedFileTypes = { "*" },
        SupportedDataFormats =
        {
            StandardDataFormats.Text,
            StandardDataFormats.WebLink,
            StandardDataFormats.Bitmap,
            StandardDataFormats.StorageItems
        }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current
        .InstalledLocation.CreateFileAsync(
            "assets\\contact.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);

    shareOperation.ReportCompleted(quickLinkInfo);
}

Note

A QuickLink stocke uniquement l’ID, et non les données associées. Votre application est chargée de conserver toutes les données utilisateur (telles que les coordonnées) et de les récupérer lors de l’activation QuickLink via ShareOperation.QuickLinkId.

Voir aussi