Partager des données

Cet article explique comment prendre en charge le contrat de partage dans une application de plateforme Windows universelle (UWP). Le contrat de partage constitue un moyen simple pour partager rapidement des données, telles que du texte, des liens, des photos et vidéos, entre les applications. Par exemple, un utilisateur peut partager une page web avec ses amis à l’aide d’une application de réseau social ou enregistrer un lien dans une application de prise de notes pour s’y référer plus tard.

Notes

Les exemples de code de cet article sont écrits pour les applications UWP. les applications de bureau WPF, Windows Forms et C++ desktop (Win32) doivent utiliser l’interface IDataTransferManagerInterop pour obtenir l’objet DataTransferManager pour une fenêtre spécifique. Pour plus d’informations, consultez l’exemple ShareSource .

Configurer un gestionnaire d’événements

Ajoutez un gestionnaire d’événements DataRequested à appeler chaque fois qu’un utilisateur appelle share. Cela peut se produire lorsque l’utilisateur appuie sur un contrôle dans votre application (par exemple, une commande de barre d’application ou un bouton) ou automatiquement dans un scénario spécifique (par exemple, si l’utilisateur a terminé un niveau et obtient un score élevé).

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;

Lorsqu’un événement DataRequested survient, votre application reçoit un objet DataRequest. Cet objet contient une classe DataPackage que vous pouvez utiliser pour fournir le contenu qu’un utilisateur souhaite partager. Vous devez fournir un titre et des données à partager. La description est facultative, mais recommandée.

DataRequest request = args.Request;

Choisir les données

Vous pouvez partager différents types de données, notamment :

  • Texte brut
  • URI (Uniform Resource Identifiers)
  • HTML
  • Texte mis en forme
  • Images bitmap
  • Fichiers
  • Données personnalisées définies par le développeur

L’objet DataPackage peut contenir un ou plusieurs de ces formats, dans n’importe quelle combinaison. L’exemple suivant illustre le partage de texte.

request.Data.SetText("Hello world!");

Définir des propriétés

Lorsque vous créez un package de données en vue de le partager, vous pouvez définir diverses propriétés qui fournissent des informations supplémentaires sur le contenu partagé. Ces propriétés aident les applications cibles à améliorer l’expérience utilisateur. Par exemple, une description se révèle utile lorsque l’utilisateur partage du contenu avec plusieurs applications. De même, un lien vers une page web ou une miniature ajoutée à une image partagée servent de référence visuelle à l’utilisateur. Pour plus d’informations, consultez DataPackagePropertySet.

Toutes les propriétés sont facultatives, à l’exception du titre. La propriété title est obligatoire et doit être définie.

request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";

Lancer l’interface utilisateur de partage

Une interface utilisateur pour le partage est fournie par le système. Pour le lancer, appelez la méthode ShowShareUI .

DataTransferManager.ShowShareUI();

des erreurs

Dans la plupart des cas, le partage de contenu est un processus simple. Toutefois, un élément inattendu peut toujours se produire. Par exemple, l’application peut avoir besoin que l’utilisateur sélectionne du contenu à partager alors que l’utilisateur ne l’a pas fait. Pour gérer ces situations, utilisez la méthode FailWithDisplayText, qui affiche un message destiné à l’utilisateur en cas de problème.

Retarder le partage avec les délégués

Parfois, il est dénué de sens de préparer les données que l’utilisateur veut partager sur le champ. Par exemple, si votre application prend en charge l’envoi d’un fichier image de grande taille dans différents formats possibles, il n’est pas efficace de créer toutes ces images avant que l’utilisateur effectue sa sélection.

Pour résoudre ce problème, un DataPackage peut contenir un délégué (fonction appelée lorsque l’application réceptrice demande des données). Nous vous recommandons d’utiliser un délégué chaque fois que les données que souhaite partager un utilisateur font appel à des ressources importantes.

async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
    // Provide updated bitmap data using delayed rendering
    if (this.imageStream != null)
    {
        DataProviderDeferral deferral = request.GetDeferral();
        InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

        // Decode the image.
        BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

        // Re-encode the image at 50% width and height.
        BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
        imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
        imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
        await imageEncoder.FlushAsync();

        request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
        deferral.Complete();
    }
}

Voir aussi