Partager des données
Cet article explique comment prendre en charge le contrat de partage dans une application de bureau ou 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 des 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.
Remarque
Les exemples de code de cet article proviennent d’applications UWP. Les applications de bureau doivent utiliser IDataTransferManagerInterop. Pour plus d’informations et pour obtenir des exemples de code, consultez Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow. Consultez également l’exemple d’application source Partage de contenu WPF.
Configurer un gestionnaire d’événements
Ajoutez un gestionnaire d’événements DataRequested à appeler lorsque l’utilisateur appelle l’option de partage. Cela peut se produire lorsque l’utilisateur appuie sur un contrôle dans votre application (par exemple, un bouton ou une commande de barre d’application), ou automatiquement dans un scénario spécifique (par exemple, si l’utilisateur termine un niveau et obtient un score élevé).
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;
Lorsqu’un événement DataRequested se produit, votre application reçoit un objet DataRequest. Celui-ci contient un DataPackage que vous pouvez utiliser pour fournir le contenu que l’utilisateur souhaite partager. Vous devez fournir un titre et des données à partager. Une description est facultative, mais recommandée.
DataRequest request = args.Request;
Choisir des 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 les développeurs
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 empaquetez des données pour le partage, vous pouvez fournir 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 est utile lorsque l’utilisateur partage du contenu avec plusieurs applications. L’ajout d’une miniature lors du partage d’une image ou d’un lien vers une page web fournit une référence visuelle à l’utilisateur. Pour plus d’informations, consultez DataPackagePropertySet.
Avertissement
Toutes les propriétés à l’exception du titre sont facultatives. 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 la lancer, appelez la méthode ShowShareUI.
DataTransferManager.ShowShareUI();
Gérer les erreurs
Dans la plupart des cas, le partage de contenu est un processus simple. Toutefois, il y a toujours un risque que quelque chose d’inattendu se produise. Par exemple, il se peut que l’application exige que l’utilisateur sélectionne du contenu, mais qu’il n’en ait pas sélectionné. Pour gérer ces situations, utilisez la méthode FailWithDisplayText, qui affiche un message à l’utilisateur en cas de problème.
Retarder le partage avec des délégués
Parfois, il peut ne pas être judicieux de préparer immédiatement les données que l’utilisateur souhaite partager. Par exemple, si votre application prend en charge l’envoi d’un fichier image volumineux dans plusieurs formats possibles, il est inefficace de créer toutes ces images avant que l’utilisateur n’effectue sa sélection.
Pour résoudre ce problème, un DataPackage peut contenir un délégué, une fonction appelée lorsque l’application de réception demande des données. Nous vous recommandons d’utiliser un délégué chaque fois que les données qu’un utilisateur souhaite partager sont gourmandes en ressources.
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();
}
}