Partager une image dans votre Universal App (Share contract)

Mise en situation

Pour les besoins de cet exemple, j’ai réalisé une petite application dessin toute bête qui permet de dessiner dans 4 couleurs différentes et ensuite de partager le dessin (Le but n’étant pas de faire une app utile et jolie, mais de faire un exemple un peu fonctionnel pour démontrer certaines fonctionnalités) (Voir l’article en entier).

Exemple

Avec l’article précédent, je peux maintenant faire mon dessin et le prendre en screenshot, mais il faudrait maintenant que je puisse le partager. Pour se faire on va utiliser les apis à notre disposition et dans notre cas, le Share Contract
La première chose à faire est de s’inscrire au share contract via le DataTransferManager. Dans mon exemple, je le fais dans le constructeur de ma page
   // on s'inscrit pour le partage du dessin via le share contract             
    DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();             
    dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(ShareMyPaintRequest);
    
Ensuite lors qu’on va utiliser le partage que ce soit via un bouton ou via la Charm Bar, notre méthode ShareMyPaintRequest va être appelée.
Petite astuce, pour forcer l’ouverture du share via un bouton par exemple, voici le code :
     // on lance l'ui du share contract 
    DataTransferManager.ShowShareUI();
    
Dans notre méthode ShareMyPaintRequest, on aura donc le code qui génère notre screenshot et ensuite le code qui var servir au partage (Titre, description … )
    private async void ShareMyPaintRequest(DataTransferManager sender, DataRequestedEventArgs args) {     
        //titre de notre partage     
        args.Request.Data.Properties.Title = "Je suis un artiste";     
        //description de notre partage    
        args.Request.Data.Properties.Description = "Partagez votre oeuvre";    
        DataRequest request = args.Request;     DataRequestDeferral deferral = request.GetDeferral();     try     {       
        //Creation de notre image      
        var memoryStream = ...       
        //texte de notre partage   
        request.Data.SetText("Regarde quel artiste je suis avec ce superbe dessin rien que pour toi !");         
        //création d'une preview de notre image partagée        
        request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromStream(memoryStream);        
        //image qui sera partagée        
        request.Data.SetBitmap(RandomAccessStreamReference.CreateFromStream(memoryStream));   
     }   
     finally  
     {         deferral.Complete();     } }
    
PS : Il est obligatoire d’utiliser le deferral car nous sommes dans une méthode asynchrone. Si la méthode avait été synchrone, il n’aurait pas été obligatoire, mais dans notre cas, si nous ne l’avions pas mis, le lancement du share aurait tourné en boucle sans jamais se lancer
Et voilà, maintenant nous partageons l’image via le share contract et c’est lui qui gère le reste, l’utilisateur pourra choisir le mode de partage qu’il préfère mail, facebook ….
Attention sur Windows Phone certaines propriétés peuvent ne pas être utilisées.

Liens

No Comments

Post a Comment