1. Introduction

Lorsque l'on développe une application mobile, il est bien souvent nécessaire, et même recommandé, d'utiliser les fonctionnalités de base de l'OS utilisé. Cela permet d'adapter l'application à la plateforme ciblée, mais également de gagner du temps lors du développement puisque, la plupart du temps, les fonctionnalités en question sont accessibles depuis des API fournies par les éditeurs. Avec Windows Phone 7, Microsoft ne déroge pas à la règle et fournit un ensemble d'interfaces de programmation permettant d'accéder aux fonctionnalités les plus utilisées de son système d'exploitation mobile.

Avec Mango, ou Windows Phone 7.5, le géant du logiciel apporte un bon nombre de nouveautés. De ce fait, les outils de développement évoluent également et il est dorénavant possible de réaliser de nombreuses choses qui étaient jusqu'alors impossibles. Pour faciliter l'interaction avec les fonctionnalités de base de Windows Phone 7, Microsoft met à la disposition des développeurs le namespace Microsoft.Phone.Tasks. Ce dernier regroupe la totalité des tâches (tasks) disponibles, c'est-à-dire l'ensemble des classes utilisables pour interagir avec les applications natives de Windows Phone 7.

Parmi ces tâches, la première version des outils de développement,(celle visant Windows Phone 7.0),proposait notamment PhoneCallTask, SmsComposeTasks ou encore WebBrowserTask :, des classes permettant respectivement de passer un appel, d'envoyer un SMS et de lancer le navigateur. Mango apporte avec elle neuf nouvelles tâches. De l'itinéraire Bing Maps au partage d'un statut sur les réseaux sociaux, ces nouvelles tâches viennent compléter les premières pour le plus grand bonheur des développeurs.

2. Les nouvelles tâches

Sans plus attendre, voici un tableau récapitulant l'ensemble des nouvelles tâches apportées par Mango. Certaines s'avéreront rapidement très utiles, voire indispensables, tandis que d'autres seront plus spécifiques.

Image non disponible


Pour chaque tâche, un exemple de code sera présenté et accompagné d'une ou plusieurs images dans la suite de l'article. Le code complet est regroupé dans une application dont les sources sont disponibles en fin d'article.

Image non disponible


Avant de passer à la présentation individuelle de chacune des tâches, voici quelques informations qu'il est bon de connaître avant de poursuivre :

  • les exemples ci-dessous nécessitent l'ajout préalable (using / import) du namespace Microsoft.Phone.Tasks ;
  • chaque tâche est exécutée grâce à la méthode Show() ;
  • les tâches effectuant des appels asynchrones possèdent un évènement Completed auquel il est nécessaire de souscrire ;
  • l'énumération TaskEventArgs.TaskResult permet de tester le résultat d'une requête.

2-A. AddressChooserTask

AddressChooserTask, comme son nom le laisse entendre, permet de récupérer l'adresse d'un contact. Le comportement de cette tâche est le même que PhoneNumberChooserTask et EmailAddressChooserTask. En appelant cette tâche, Windows Phone 7 va lancer l'application Contacts et vous permettre d'en sélectionner un. Ceci fait, l'adresse du contact sélectionné vous sera renvoyée.

La classe AddressChooserTask :

Image non disponible


Code :

 
Sélectionnez

private void AddressChooserTaskButton_Click(object sender, RoutedEventArgs e)
{
   AddressChooserTask addressChooser = new AddressChooserTask();

   addressChooser.Completed += new EventHandler<AddressResult>(addressChooser_Completed);
   addressChooser.Show();
}

void addressChooser_Completed(object sender, AddressResult e)
{
   if (e.TaskResult == TaskResult.OK)
       MessageBox.Show(String.Format("{0} vit à {1}", e.DisplayName, e.Address));
   else
       MessageBox.Show("Erreur lors de la récupération de l'adresse");
}

Dans un premier temps, comme précisé ci-dessus, l'application Contacts est lancée. L'utilisateur voit alors apparaître l'ensemble de ses contacts et peut en sélectionner un.

Image non disponible


Une fois le contact sélectionné, l'événement Completed est levé et l'adresse du dit contact peut être récupérée et affichée.

Image non disponible


Un exemple d'utilisation :

Cette tâche peut trouver son utilité dans une application géolocalisant vos contacts. Une fois l'adresse récupérée, il est alors tout à fait possible d'utiliser le service Geocoding de Bing Maps afin de récupérer la latitude et longitude correspondant à cette adresse et positionner ce point sur un module Bing Maps.

2-B. BingMapsDirectionsTask

BingMapsDirectionsTasks permet de lancer l'application Bing Maps de votre Windows Phone 7 afin de tracer un itinéraire. Cet itinéraire est déterminé par une position initiale et une position d'arrivée qu'il est nécessaire d'indiquer à la tâche. Ces positions sont représentées par des objets de type LabeledMapLocation. Le constructeur de cet objet prend en paramètres une chaîne de caractères représentant le lieu, ainsi qu'un objet de type System.Device.Location.GeoCoordinate indiquant la position géographique du lieu en question.

La classe BingMapsDirectionsTask :

Image non disponible


Code :

Dans l'exemple ci-dessous, j'utilise cette tâche afin de tracer l'itinéraire entre le Parc de Montsouris et le Grand Palais, à Paris.

 
Sélectionnez

private void BingMapsDirectionsTaskButton_Click(object sender, RoutedEventArgs e)
{
   BingMapsDirectionsTask bingMapsDirection = new BingMapsDirectionsTask()
   {
       Start = new LabeledMapLocation("Parc de Montsouris", new System.Device.Location.GeoCoordinate(48.833651, 2.367039)),
       End = new LabeledMapLocation("Grand Palais", new System.Device.Location.GeoCoordinate(48.862597, 2.315154))
   };

   bingMapsDirection.Show();
}

Une fois la tâche exécutée, l'itinéraire est tracé et les différentes instructions apparaissent à l'écran.

Image non disponible


Un exemple d'utilisation :

Cette tâche peut être particulièrement utile pour les applications géolocalisant les restaurants, magasins et autres établissements géographiquement proches de l'utilisateur. Il peut alors être envisageable d'utiliser cette tâche pour tracer rapidement un itinéraire entre l'utilisateur et l'établissement sélectionné.

2-C. BingMapsTask

BingMapsTasks permet de lancer l'application BingMaps afin d'effectuer une recherche quelconque. Pour cela, il est nécessaire d'indiquer les termes recherchés, le centre géographique de la recherche, représenté par un objet de type GeoCoordinate, ainsi que le niveau de zoom du module Bing Maps.

La classe BingMapsTask :

Image non disponible


Code :

Dans l'exemple ci-dessous, je positionne le centre de ma recherche sur Metz et recherche “Supinfo Metz” avec un niveau de zoom élevé.

 
Sélectionnez

private void BingMapsTaskButton_Click(object sender, RoutedEventArgs e)
{
   BingMapsTask bingMapsTask = new BingMapsTask()
   {
       Center = new System.Device.Location.GeoCoordinate(49.117545, 6.174409),
       SearchTerm = "Supinfo Metz",
       ZoomLevel = 17
   };

   bingMapsTask.Show();
}

Une fois la recherche effectuée, Bing Maps s'ouvre et affiche l'élément recherché.

Image non disponible


Un exemple d'utilisation :

En reprenant l'exemple d'utilisation de BingMapsDirectionsTask, cette tâche pourrait permettre à l'utilisateur de lancer manuellement une recherche sur un établissement qui n'aurait pas été trouvé par l'application.

2-D. ConnectionSettingsTask

ConnectionSettingsTask permet de lancer l'utilitaire qui peut activer ou désactiver (on/off) une connexion. Cette connexion est déterminée par l'énumération Microsoft.Phone.Tasks.ConnectionSettingsType et prend l'une des valeurs suivantes :

  • AirplaneMode ;
  • Bluetooth ;
  • Cellular ;
  • WiFi.

La classe ConnectionSettingsTasks :

Image non disponible


Code :

Dans l'exemple ci-dessous, j'exécute l'application permettant d'activer ou désactiver le WiFi. Pour cela, il suffit d'utiliser la valeur WiFi de l'énumération ConnectionSettingsType et d'appeler la méthode Show() de la tâche.

 
Sélectionnez

    private void ConnectionSettingsTaskButton_Click(object sender, RoutedEventArgs e)
    {
       ConnectionSettingsTask connectionSettings = new ConnectionSettingsTask()
       {
           ConnectionSettingsType = ConnectionSettingsType.WiFi
       };
    
       connectionSettings.Show();
    }

L'application s'exécute aussitôt.

Image non disponible


Un exemple d'utilisation :

Beaucoup d'applications nécessitent une connexion pour fonctionner convenablement. Cette tâche peut alors être utilisée pour permettre à l'utilisateur d'activer rapidement ses connexions si cela n'est pas déjà fait.

2-E. GameInviteTask

GameInviteTask lance l'écran d'invitation permettant à un utilisateur d'inviter d'autres joueurs à une session multijoueur. Pour exécuter cette tâche, seul un identifiant de session est nécessaire.

La classe GameInviteTask :

Image non disponible


Code :

 
Sélectionnez

private void GameInviteTaskButton_Click(object sender, RoutedEventArgs e)
{
   GameInviteTask gameInvite = new GameInviteTask()
   {
       SessionId = "MySessionTest"
   };

   gameInvite.Completed += new EventHandler<TaskEventArgs>(gameInvite_Completed);
   gameInvite.Show();
}

void gameInvite_Completed(object sender, TaskEventArgs e)
{
   if (e.TaskResult == TaskResult.OK)
       MessageBox.Show("Invitation envoyée");
   else
       MessageBox.Show("Erreur lors de l'envoi");
}

Une fois la tâche exécutée, l'écran d'invitation s'affiche. Il faut alors renseigner l'adresse mail ou le gamertag du contact que l'on souhaite inviter.

Image non disponible


Un exemple d'utilisation :

Bien que cette tâche permette d'inviter un contact afin de jouer, elle peut être utilisée dans n'importe quel type d'application. On peut ainsi s'en servir pour faire de la promotion par exemple.

2-F. SaveContactTask

Avec Mango, il est dorénavant possible d'accéder aux contacts de votre Windows Phone depuis n'importe quelle application. Il est également possible d'ajouter un contact à votre carnet de contacts grâce à la tâche SaveContactTask. Pour ce faire, il est nécessaire de renseigner manuellement l'ensemble des informations concernant le contact à ajouter (noms, téléphone, mail…).

La classe SaveContactTask :

Image non disponible


Code :

 
Sélectionnez

private void SaveContactTaskButton_Click(object sender, RoutedEventArgs e)
{
   SaveContactTask saveContact = new SaveContactTask()
   {
       LastName = "Rebours",
       FirstName = "Loïc",
       HomePhone = "00 00 00 00 00",
       MobilePhone = "00 00 00 00 00",
       Website = "http://www.blog.loicrebours.fr",
       PersonalEmail = "loic.rebours@supinfo.com",
       Company = "Supinfo",
       HomeAddressCountry = "France",
       HomeAddressCity = "Metz",
       JobTitle = ".NET Developer"
   };

   saveContact.Completed += new EventHandler<SaveContactResult>(saveContact_Completed);
   saveContact.Show();
}

void saveContact_Completed(object sender, SaveContactResult e)
{
   if (e.TaskResult == TaskResult.OK)
               MessageBox.Show("Le contact a été correctement sauvegardé");
       else if (e.TaskResult == TaskResult.Cancel)
               MessageBox.Show("La création a été annulée");
}

Une fois la tâche exécutée, le formulaire d'ajout de contact est lancé. Vous pouvez alors choisir le compte (Outlook, Gmail, Live…) sur lequel vous souhaitez ajouter le contact. Vous pouvez également modifier les informations saisies précédemment, puis confirmer ou annuler l'ajout du contact.

Image non disponible


Un exemple d'utilisation :

Imaginons une application permettant de mettre en relation une ou plusieurs personnes inconnues. Cette tâche pourrait être utilisée afin d'ajouter en tant que contact cette ou ces nouvelles personnes.

2-G. SaveRingtoneTask

SaveRingtoneTask permet d'enregistrer localement une sonnerie qu'il sera alors possible d'utiliser sur votre Windows Phone 7 en tant que sonnerie par défaut.

Pour cela, la musique à enregistrer doit :

  • être de type mp3 ou wma ;
  • durer moins de 40 s ;
  • peser moins de 1Mo ;
  • ne pas être protégé par des DRM.

Pour s'exécuter, la tâche a besoin d'un libellé pour la sonnerie, d'un booléen indiquant si la sonnerie en question sera accessible depuis d'autres applications et du chemin - représenté par une URI - vers le fichier en question. Attention, le fichier doit être local pour pouvoir être utilisé par cette tâche. Concrètement, il doit donc être contenu dans le .xap en tant que ressource ou être stocké dans l'isolated storage.

La classe SaveRingtoneTask :

Image non disponible


Code :

Dans l'exemple ci-dessous, mon MP3 se trouve à la racine de l'application, en tant que ressource.

 
Sélectionnez

private void SaveRingtoneTaskButton_Click(object sender, RoutedEventArgs e)
{
   SaveRingtoneTask saveRingTone = new SaveRingtoneTask()
   {
       DisplayName = "MyRingtone",
       IsShareable = true,
       Source = new Uri("appdata:/starway.mp3")
   };

   saveRingTone.Completed += new EventHandler<TaskEventArgs>(saveRingTone_Completed);
   saveRingTone.Show();
}

void saveRingTone_Completed(object sender, TaskEventArgs e)
{
   if (e.TaskResult == TaskResult.OK)
               MessageBox.Show("La sonnerie a été correctement sauvegardée ");
       else if (e.TaskResult == TaskResult.Cancel)
               MessageBox.Show("La sauvegarde a été annulée");
}

Une fois la tâche exécutée, vous pouvez modifier le nom de la sonnerie et la définir en tant que sonnerie par défaut, puis confirmer ou annuler l'ajout. Ceci fait, la sonnerie est dès lors accessible depuis le menu Paramètres > Sonneries + sons > Sonnerie.

Image non disponible


Un exemple d'utilisation :

Une application permettant de découvrir des morceaux de musique libres sur Internet pourrait utiliser cette tâche afin d'offrir à l'utilisateur la possibilité d'utiliser le début de la musique en question en tant que sonnerie.

2-H. ShareLinkTask

Avant Mango, il était particulièrement pénible de publier des informations sur les réseaux sociaux depuis une application. En effet, il n'existait aucune API officielle et il fallait bien souvent passer des heures et écrire plusieurs dizaines/centaines de lignes de code pour ne publier ne serait-ce qu'un petit statut Facebook. Avec Mango, Microsoft propose deux tâches permettant de réaliser cette action d'une façon incroyablement simple. La première, ShareLinkTask permet de partager un lien sur les réseaux sociaux liés au téléphone de l'utilisateur (Facebook, Twitter…). Pour cela, il est nécessaire de fournir à la tâche un titre pour le lien, un message personnel pour accompagner le lien, ainsi que le lien en question, représenté par une URI.

La classe ShareLinkTask :

Image non disponible


Code :

 
Sélectionnez

private void ShareLinkTaskButton_Click(object sender, RoutedEventArgs e)
{
   ShareLinkTask shareLink = new ShareLinkTask()
       {
           Title = "Winrumors",
           Message = "Windows Phone 7 Marketplace hits 30,000 applications",
           LinkUri = new Uri(@"http://www.winrumors.com/windows-phone-7-marketplace-hits-30000-applications/")
       };

   shareLink.Show();
}

Lors de son exécution, la tâche lance l'application permettant de partager du contenu sur les réseaux sociaux. L'utilisateur peut alors modifier le message et sélectionner les réseaux sociaux sur lesquels il souhaite effectuer cette publication (note : cet écran ne s'affiche pas depuis l'émulateur WP7). Voici le résultat observé depuis Facebook et Twitter.

Image non disponible
Image non disponible


Un exemple d'utilisation :

Une application agissant en tant que lecteur RSS pourrait utiliser cette tâche afin de permettre à ces utilisateurs de partager l'URL d'un flux qu'ils apprécieraient particulièrement.

2-I. ShareStatusTask

À l'instar de la précédente tâche, ShareStatusTask permet de partager un statut sur les réseaux sociaux. Cette fois, il suffit uniquement d'indiquer le statut en question pour lancer la publication.

La classe ShareStatusTask :

Image non disponible


Code :

 
Sélectionnez

private void ShareStatusTaskButton_Click(object sender, RoutedEventArgs e)
{
   ShareStatusTask shareStatus = new ShareStatusTask()
   {
       Status = "Hello World !"
   };

   shareStatus.Show();
}

Là encore, l'application de partage sur les réseaux sociaux se lance et permet de modifier le message et de sélectionner les réseaux sociaux sur lesquels le statut sera publié (note : cet écran ne s'affiche pas depuis l'émulateur WP7). Voici le résultat depuis Windows Live, Facebook et Twitter.

Image non disponible
Image non disponible
Image non disponible


Un exemple d'utilisation :

Vu la présence des réseaux sociaux aujourd'hui, cette tâche peut être présente dans la plupart des applications.

3. Conclusion

Cet article vous a présenté les nouvelles tâches introduites par la dernière version du kit de développement à destination de Windows Phone 7 Mango. Comme je le disais au début, certaines devraient rapidement devenir indispensables, comme ShareStatusTask qui permet de publier de façon très simplifiée sur les réseaux sociaux. D'autres, telles que GameInviteTask, trouveront leur utilisation dans des applications bien plus spécifiques. Quoi qu'il en soit, toutes sont les bienvenues et sont d'une simplicité extrême à utiliser.

Vous pouvez retrouver l'ensemble des exemples ci-dessus dans ce projet.

4. Remerciements

Merci à Nicolas Esprit, Immobilis, Maxime Gault et ClaudeLELOUP pour les différentes relectures.