• Facile

Ce cours est visible gratuitement en ligne.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Mis à jour le 29/04/2014

Les Tasks du téléphone

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Utiliser les capteurs du téléphone n’est pas le seul moyen d’accéder aux fonctionnalités internes du téléphone. Les Task, que l’on peut traduire en tâches, sont une solution permettant d’accéder à d’autres applications du téléphone. Il s’agit par exemple de la possibilité de sélectionner un contact dans le répertoire de l’utilisateur, d’envoyer un SMS, de prendre une photo, etc.
Nous allons découvrir dans ce chapitre qu’il y a deux sortes de tâches, les choosers et les launchers, elles sont situées dans l’espace de nom : using Microsoft.Phone.Tasks;

Les choosers

Les choosers, comme le nom le suggère aux anglophones, permettent de choisir une information. Plus précisément, il s’agira de démarrer une fonctionnalité qui va nous renvoyer quelque chose d’exploitable, par exemple un contact dans le répertoire.
Voici une liste des choosers des Windows Phone 8 :

Chooser

Description

AddressChooserTask

Démarre l’application Contacts pour choisir une adresse physique

AddWalletItemTask

Démarrer l’application Wallet (portefeuille) afin de permettre d’y ajouter un produit

CameraCaptureTask

Démarre l’appareil photo pour pouvoir prendre une photo

EmailAddressChooserTask

Démarre l’application Contacts pour choisir une adresse email

GameInviteTask

Permet d’inviter des autres joueurs à participer à un jeu en ligne

PhoneNumberChooserTask

Démarre l’application Contacts pour choisir un numéro de téléphone

PhotoChooserTask

Permet de sélectionner une photo du téléphone

SaveContactTask

Démarre l’application Contacts pour enregistrer un contact

SaveEmailAddressTask

Démarre l’application Contacts pour enregistrer un email

SavePhoneNumberTask

Démarre l’application Contacts pour enregistrer un numéro de téléphone

SaveRingtoneTask

Démarre l’application Sonneries

Je ne vais pas tous vous les présenter en détail, car ce serait un peu fastidieux, d’autant plus que la description est globalement assez explicite. Sachez cependant que l’émulateur ne permet pas de simuler toutes les tâches et que vous aurez parfois besoin d’un téléphone pour vous rendre vraiment compte du résultat.
L’important est que les choosers renvoient un élément à exploiter. Donc globalement, il faudra instancier la tâche, s’abonner à l’événement de fin de tâche et exploiter le résultat. Par exemple, pour sélectionner une photo disponible dans le téléphone, nous pourrons utiliser le code suivant :

public partial class MainPage : PhoneApplicationPage
{
    private PhotoChooserTask photoChooserTask;

    public MainPage()
    {
        InitializeComponent();
        photoChooserTask = new PhotoChooserTask();
        photoChooserTask.Completed += photoChooserTask_Completed;
    }

    private void photoChooserTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(e.ChosenPhoto);
            Photo.Source = image;
        }
    }

    private void Button_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        photoChooserTask.Show();
    }
}

Comme vous pouvez le constater, la photo sélectionnée est dans le paramètre de l’événement. Celui-ci possède également un résultat de tâche, par exemple, nous n’aurons une valeur dans la propriété ChosenPhoto que si l’utilisateur est allé au bout de la tâche, et qu’également le résultat soit OK.
Coté XAML, nous pourrons avoir :

<StackPanel>
    <Button Content="Choisir la photo" Tap="Button_Tap" />
    <Image x:Name="Photo" />
</StackPanel>

Dans l’émulateur, nous avons quelques valeurs bouchonnées pour cette tâche, voyez plutôt sur la figure suivante.

Choix d'une image depuis l'émulateur
Choix d'une image depuis l'émulateur

Illustrons encore les choosers avec la tâche CameraCaptureTask qui permet de prendre une photo depuis votre application :

public partial class MainPage : PhoneApplicationPage
{
    private CameraCaptureTask cameraCaptureTask;

    public MainPage()
    {
        InitializeComponent();
        cameraCaptureTask = new CameraCaptureTask();
        cameraCaptureTask.Completed += cameraCaptureTask_Completed;
    }

    private void cameraCaptureTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(e.ChosenPhoto);
            Photo.Source = image;
        }
    }

    private void Button_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        cameraCaptureTask.Show();
    }
}

Ici aussi, l’émulateur fonctionne en mode bouchon et nous propose une image factice pour simuler la prise d’une photo, comme on peut le voir sur la figure suivante.

Simulation de prise de photo
Simulation de prise de photo

Vous pourrez prendre la photo depuis l’émulateur en cliquant avec le bouton droit.

Les launchers

Les launchers permettent de démarrer une application sur le téléphone, par exemple envoyer un mail ou un SMS. Ils fonctionnent comme les choosers mais n’attendent pas d’informations en retour.

Launcher

Description

BingMapsDirectionsTask

Permet de démarrer l’application carte de Windows Phone 7 pour afficher un itinéraire

BingMapsTask

Permet de démarrer la carte de Windows Phone 7, centrée sur une position

ConnectionSettingsTask

Permet d’afficher la page de configuration du réseau

EmailComposeTask

Permet de composer un nouvel email via l’application de messagerie

MapDownloaderTask

Permet de télécharger les cartes pour une utilisation hors ligne

MapsDirectionsTask

Permet de démarrer l’application de carte pour afficher un itinéraire entre deux points

MapsTask

Permet de démarrer l’application de carte centrée sur un emplacement

MapUpdaterTask

Permet de télécharger les mises à jour de cartes

MarketplaceDetailTask

Permet d’afficher le détail d’une application dans le Marketplace

MarketplaceHubTask

Démarre l’application Marketplace

MarketplaceReviewTask

Permet d’atteindre la fiche des avis d’une application

MarketplaceSearchTask

Affiche les résultats d’une recherche Marketplace

MediaPlayerLauncher

Démarre le lecteur de média

PhoneCallTask

Permet de passer des appels

SaveAppointmentTask

Permet d’enregistrer un rendez-vous

SearchTask

Démarre une recherche sur le web

ShareLinkTask

Partage un lien sur un réseau social

ShareMediaTask

Permet de partager une photo ou vidéo avec les applications qui se sont enregistrées pour les exploiter

ShareStatusTask

Partage un message de statut sur un réseau social

SmsComposeTask

Permet de composer un SMS

WebBrowserTask

Démarre le navigateur web

Ici aussi, les descriptions parlent d’elles-mêmes. Dans notre application de lecteur de flux RSS, il aurait par exemple été possible d’utiliser le WebBrowserTask au lieu d’embarquer le contrôle WebBrowser dans nos pages. Il s’utilise ainsi :

WebBrowserTask webBrowserTask = new WebBrowserTask { Uri = new Uri("http://fr.openclassrooms.com/informatique/cours/apprenez-a-developper-en-c", UriKind.Absolute) };
webBrowserTask.Show();

qui démarre donc Internet Explorer avec la page demandée (voir la figure suivante).

Le launcher WebBrowserTask affiche une page web
Le launcher WebBrowserTask affiche une page web

Tous les launchers fonctionnent de la même façon, par exemple pour pré-remplir un SMS avant envoi :

SmsComposeTask smsComposeTask = new SmsComposeTask { To = "+33123456789", Body = "Bon anniversaire !" };
smsComposeTask.Show();

À la figure suivante, vous pouvez observer le rendu dans l’émulateur.

Composition d'un SMS pré-rempli
Composition d'un SMS pré-rempli

Voyons enfin un autre launcher bien pratique qui nous permet d’afficher un itinéraire sans passer par les API de la carte que nous avons précédemment vues :

MapsDirectionsTask mapsDirectionsTask = new MapsDirectionsTask();
LabeledMapLocation emplacement = new LabeledMapLocation("Tour Eiffel", null);
mapsDirectionsTask.End = emplacement;
mapsDirectionsTask.Show();

Regardez la figure suivante pour le rendu.

Calcul d'itinéraire grâce au launcher
Calcul d'itinéraire grâce au launcher

À noter que dans ce cas, il prend la position de l’utilisateur comme point de départ pour calculer l’itinéraire. Vous pouvez affecter la propriété mapsDirectionsTask.Start afin de préciser un point de départ différent de la position courante de l’utilisateur. Vous pouvez également spécifier des coordonnées GPS comme point d’arrivée, et dans ce cas-là, la chaine passée est utilisée comme étiquette :

GeoCoordinate tourEiffel = new GeoCoordinate { Latitude = 48.858115, Longitude = 2.294710 };
LabeledMapLocation emplacement = new LabeledMapLocation("Tour Eiffel", tourEiffel);

Etat de l’application

Comme nous l’avons déjà appris, lorsqu’est démarrée une nouvelle application, l’application en cours passe en mode suspendu et peut potentiellement être terminée. Cela veut dire que lorsque nous démarrons un chooser ou un launcher, il est possible que votre application soit arrêtée. Il faut donc que vous veilliez à enregistrer l’état de votre application au cas où celle-ci serait arrêtée.
Mais en plus, dans le cas du chooser, il pourrait arriver que votre application soit terminée avant d’avoir récupéré la réponse du chooser, ce qui pose un problème. Pour éviter cela, en instanciant un chooser, Windows Phone est capable de vérifier la présence d’une information dans celui-ci. Cela implique que l’événement de fin de choix soit défini sur une variable d’instance de la classe et non dans une méthode, comme ce que j'ai montré dans les exemples de chooser. On ne doit pas déclarer un chooser par exemple dans le constructeur de notre page. L’instanciation correcte du chooser doit donc être :

public partial class MainPage : PhoneApplicationPage
{
    private EmailAddressChooserTask emailAddressChooserTask;

    public MainPage()
    {
        InitializeComponent();
        emailAddressChooserTask = new EmailAddressChooserTask();
        emailAddressChooserTask.Completed += emailAddressChooserTask_Completed;
    }

    private void emailAddressChooserTask_Completed(object sender, EmailResult e)
    {
        if (e.TaskResult == TaskResult.OK)
            MessageBox.Show("Adresse choisie : " + e.Email);
    }

    private void Button_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        emailAddressChooserTask.Show();
    }
}

afin d’avoir une chance de récupérer la sélection.

  • Les launchers et les choosers offrent une solution pour interagir avec d’autres applications du téléphone très facilement.

  • Ils permettent d’avoir une expérience utilisateur propre et cohérente pour utiliser les applications internes du téléphone.

  • Un chooser doit être déclaré dans la portée d’une page.

Exemple de certificat de réussite
Exemple de certificat de réussite