Le GPS et les services de géolocalisation

Ceci est le troisème billet d’une série sur Windows Phone 7 dans laquelle je construis une application permettant de surveiller la disponibilité de vélos des stations Vélib’ à Paris. Pour rappel, voici la table de matières:

  1. Introduction et installation des outils
  2. Création d’une application et utilisation du contrôle Bing Maps
  3. Le GPS et les services de géolocalisation
  4. Consommation d’un service OData
  5. Ajout de punaises sur une carte Bing Maps
  6. Création de nouvelles pages et navigation
  7. Création de vignettes sur la page d’accueil

Accéder à la position actuelle du téléphone

On voudrait, lorsque l’application se lance et lorsque l’utilisateur bouge, que la carte que nous avons ajoutée hier soit centrée sur leur position courante. Pour cela nous allons utiliser des classes du namespace System.Device.Location et, plus spécifiquement, la classe GeoCoordinateWatcher.

Cette classe nous permet d’obtenir la position du téléphone en utilisant plusieurs sources : les bornes WiFi à proximité, les tours cellulaires et, bien sûr, le GPS. C’est pour cette raison que dans le titre du billet je parle de GPS et des services de géolocalisation.

Pour lancer la détection de la position courante de l’utilisateur dans notre page principale, nous allons écrire un peu de C#. Ouvrez le fichier MainPage.xaml.cs pour ajouter une instance de GeoCoordinateWatcher à votre page :

private GeoCoordinateWatcher _gcw;

// Constructor
public MainPage()
{
    InitializeComponent();

    this._gcw = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
    this._gcw.MovementThreshold = 20;
    this._gcw.PositionChanged += this.OnPositionChanged;

    this.Loaded += this.OnPageLoaded;
}

Vous aurez remarqué que je demande au GeoCoordinateWatcher de récupérer la position du téléphone avec le plus de précision possible. Ceci parce que j’ai besoin de lui montrer des information qui sont très liées à sa position exacte. Si mon application avait seulement besoin de connaitre la position approximative de l’utilisateur, j’aurais passé la valeur GeoPositionAccuracy.Normal au constructeur, ce qui permet au téléphone de mieux gérer ses ressources. J’ai aussi spécifié la valeur minimale, en mètres, que la position du téléphone doit changer pour qu’un évènement de changement de position soit levé. Ceci évitera que le logiciel rafraichisse inutilement ses données trop souvent.

J’ai attendu que la page soit totalement chargée avant de démarrer le service de localisation :

private void OnPageLoaded(object sender, RoutedEventArgs e)
{
    this._gcw.Start();
}

void OnPositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
    this.Map.Center = e.Position.Location;
}

Lorsque la position change et que la méthode OnPositionChanged est appelée, je récupère la position actuelle et j’en fait le centre de la carte que j’ai ajoutée hier à la page. D’ailleurs, le code du contrôle Bing Maps a changé un peu depuis hier :

<map:Map x:Name="Map"
    CredentialsProvider="{StaticResource BingMapsKey}"
    ZoomBarVisibility="Visible" ZoomLevel="17"/>

Le simulateur

Si vous lancez votre application dans l’émulateur, vous constaterez rapidement que son comportement a changé. La carte est désormais automatiquement centrée sur le campus de Microsoft à Redmond :

Windows Phone Emulator (3)

Ceci s’explique par le nouveau simulateur GPS installé avec les outils “Mango”. Pour y accéder, cliquez sur le double chevron dans la boite à outils de l’émulateur, puis sur l’onglet Location de la fenêtre qui s’ouvre.

Additional Tools

Tant que le bouton Live de nouvelle fenêtre est activé (gris foncé), chaque clic sur la carte placera une punaise qui deviendra la position actuelle communiqué aux services de géolocalisation du téléphone.

Vous pouvez utiliser la souris pour naviguer sur la carte et les contrôles de zoom pour obtenir plus ou moins de précision. Vote application étant à l’écoute des changements de position des services de géolocalisation, elle devrait centrer la carte sur une nouvelle position à chaque fois que vous cliquez sur la carte du simulateur. Pour préparer l’image ci-dessous, j’ai effectué une recherche avec les mots clés “Paris, France”, j’ai ensuite zoomé sur l’Ile de la Cité et cliqué près de Notre-Dame pour y placer une punaise et centrer le téléphone sur cette nouvelle position.

Additional Tools (2)

Je vous laisse étudier plus en détail les services de géolocalisation et vous amuser avec le simulateur si vous le souhaitez. Vous pouvez essayer de créer des parcours qui simuleront une personne qui se déplace, par exemple.

Demain nous allons chercher les stations Vélib’ qui se trouvent à proximité du téléphone.

Création d’une application et utilisation du contrôle Bing Maps

Ceci est le deuxième billet d’une série sur Windows Phone 7 dans laquelle je construis une application permettant de surveiller la disponibilité de vélos des stations Vélib’ à Paris. Pour rappel, voici la table de matières:

  1. Introduction et installation des outils
  2. Création d’une application et utilisation du contrôle Bing Maps
  3. Le GPS et les services de géolocalisation
  4. Consommation d’un service OData
  5. Ajout de punaises sur une carte Bing Maps
  6. Création de nouvelles pages et navigation
  7. Création de vignettes sur la page d’accueil

Description de l’application

Hier, pressé de vous faire installer les outils, j’ai oublié de vous présenter l’application elle-même !

Il s’agit d’une application très simple, permettant de surveiller la disponibilité des Vélib’s à Paris. Pour ceux qui ne connaissent pas Vélib’, il s’agit d’un réseau de stations, permettant la location de courte durée de vélos dans la capitale.

Notre application aura donc deux écrans :

Screenshot 1Screenshot 2

Le premier permet d’apercevoir, sur une carte qui occupe l’écran entier, les stations à proximité de l’utilisateur. Le deuxième sera accessible lorsque l’on appuie sur une station sur la carte ou depuis l’écran d’accueil.

Création du projet

Nous allons commencer par créer un nouveau projet.

New Project

Sélectionnez un projet de type Windows Phone Application dans la catégorie Silverlight for Windows Phone. J’ai appelé mon projet UnVelo.Wp7, mais vous êtes libres d’appeler le vôtre comme vous le souhaitez.

Comme j’avais prévenu, j’aurai besoin de fonctionnalités disponibles uniquement dans la nouvelle version du système d’exploitation. Choisissez donc les outils “Mango” ou Windows Phone 7.1 :

New Windows Phone Application

WindowClipping Votre nouveau projet contient déjà un certain nombre de fichiers :

  • App.xaml et App.xaml.cs contiennent du code relatif à l’application dans sa globalité, par exemple, des gestionnaires d’évènements ou, dans quelques instants, des ressources globales.
  • ApplicationIcon.jpg, Background.jpg et SplashScreenImage.jpg sont des images utilisées par le téléphone pour l’icône de l’application, la vignette de l’écran d’accueil et au démarrage de l’application. Je ne rentrerai pas dans le détail pour le moment, mais je vous encourage à jouer avec pour voir comment elles se comportent.
  • MainPage.xaml a été configurée dans App.xaml comme étant la page de démarrage de notre application, c’est donc ici que nous allons commencer.

ViewHolder

La page contient un certain nombre d’éléments par défaut. Ceux-ci permettent au développeur d’indiquer le nom de l’application, le titre de page et, dans une grille appelée ContentPanel, d’ajouter le contenu qu’il souhaite. Dans notre cas, cette page ne nous convient pas du tout, nous allons donc tout supprimer et ajouter notre plan.

Le contrôle Bing Maps

Pour ajouter un plan dans la page principale, nous allons utiliser le contrôle Bing Maps pour Silverlight fourni avec Windows Phone. Pour cela, vous devez ajouter une référence vers l’assembly Microsoft.Phone.Controls.Maps :

Add Reference

Ensuite, pour utiliser le contrôle dans le code XAML, il faut donner un alias au namespace Microsoft.Phone.Controls.Maps dans le fichier MainPage.xaml :

<phone:PhoneApplicationPage
    x:Class="UnVelo.Wp7.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:map="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

Ce qui nous permettra enfin d’ajouter le contrôle à notre page :

<Grid x:Name="LayoutRoot" Background="Transparent">
    <map:Map />
</Grid>

Un petit Ctrl+F5 compilera et lancera l’émulateur pour que nous puissions enfin voir notre application pour la première fois :

Windows Phone Emulator

En l’état, vous ne pouvez pas faire grand-chose avec l’application. Vous pouvez tout de même utiliser un doigt pour déplacer la carte, faire un “double-clic” en appuyant deux fois rapidement pour zoomer et quitter l’application à l’aide du bouton Précédent de l’émulateur. Si vous avez un écran tactile, vous pourrez aussi tester des gestes comme le “pincement” pour zoomer.

Vous avez surement remarquée aussi la présence d’un message au milieu du contrôle, vous indiquant que vous n’avez pas fourni d’information d’identification et vous invitant à créer un compte développeur.

Ce compte peut être créé gratuitement sur le site Bing Maps Account Center et sera lié à un Live Id. Sur ce site vous pourrez créer une nouvelle “clé” pour l’utilisation des APIs Bing Maps.

Vous pouvez créer une clé de type “Développeur” ou “Mobile”. Les deux sont gratuites et vous permettront de travailler sans problème sur votre application Windows Phone 7. Une clé “Mobile” sera nécessaire lors du déploiement d’une application utilisant le contrôle Bing Maps, en revanche, sinon vous risquez de rencontrer des problèmes dus aux limitations des autres types de clé.

Une fois que vous avez obtenu votre clé, vous allez la copier et en faire une ressource globale de votre application, car vous allez en avoir besoin à plusieurs endroits.

Ouvrez donc le fichier App.xaml, dans lequel vous allez ajouter le namespace Microsoft.Phone.Controls.Maps, comme vous l’avez fait au-dessus et vous allez ajouter votre clé à la section Resources :

<Application.Resources>
    <map:ApplicationIdCredentialsProvider x:Key="BingMapsKey" ApplicationId="[Votre clé ici]" />
</Application.Resources>

Vous pouvez maintenant la référencer depuis MainPage.xaml :

<map:Map CredentialsProvider="{StaticResource BingMapsKey}"
         ZoomBarVisibility="Visible"
         ZoomLevel="12"
         Center="48.856614,2.352222"/>

Je m’arrêterai ici pour aujourd’hui. Vous avez tout ce qu’il vous faut pour jouer un peu avec le contrôle Bing Maps. N’hésitez pas à tester différentes propriétés pour changer l’affichage.

Demain nous utiliserons les services de géolocalisation pour centrer la carte sur la position actuelle de l’utilisateur automatiquement.

Windows Phone 7 : Introduction et installation des outils

Introduction

Windows Phone 7La semaine dernière, on m’a demandé de parler au WygDay sur le développement Windows Phone 7 avec Niels. Lui, il a présenté le système à ceux qui ne le connaissaient pas et fait quelques démos sur les nouveautés que l’on peut trouver dans Mango—la nouvelle version qui sortira, a priori, au deuxième semestre. Moi, j’ai pris le pari de faire une application complète dans les 20 minutes qui restaient.

Evidemment, il s’agit d’une application plutôt simple—pas de MVVM, pas d’IoC ou d’injection de dépendances. Ce n’était pas la chasse aux mot clés à la mode, juste une application qui montre quelques concepts de base.

Etant donné qu’il y a eu un certain intérêt pour ces concepts, d’ailleurs, j’ai décidé que j’allais reprendre la démo ici en plusieurs billets courts. Voilà la “table de matières” qui reprend ma démo du WygDay :

  1. Introduction et installation des outils
  2. Création d’une application et utilisation du contrôle Bing Maps
  3. Le GPS et les services de géolocalisation
  4. Consommation d’un service OData
  5. Ajout de punaises sur une carte Bing Maps
  6. Création de nouvelles pages et navigation
  7. Création de vignettes sur la page d’accueil

Je suis sûr qu’en écrivant ces quelques articles, d’autres idées vont arriver et feront l’objet de nouveaux billets. Pour le moment, je vous invite à continuer votre lecture ci-dessous et à revenir tous les jours cette semaine pour la suite.

Installation des outils

get_the_free_toolsJ’ai promis des billets courts, donc, après une longue introduction, je vais commencer cette série par un simple lien : App Hub.

C’est sur le App Hub que Microsoft a décidé de publier, gratuitement, tout ce qu’il faut pour écrire des applications pour Windows Phone 7 (et pour XBox, mais je vais essayer de rester sur le sujet qui nous intéresse).

En cliquant sur “Download the free tools” (oui, pas de version française pour l’instant) vous avez le choix aujourd’hui entre les Windows Phone Developer Tools 7.0 qui correspondent à la version actuelle de Windows Phone 7, ou les Windows Phone Developer Tools 7.1 Beta pour la future version qu’on appelle “Mango”.

L’une comme l’autre vous permettront, a priori (sauf problèmes inattendus de la béta), d’écrire des logiciels pour la version actuelle qui pourront être publiées sur le Marketplace. Pour ma démo, on aura besoin de quelques fonctionnalités spécifiques à l’OS et/ou aux outils “Mango”, donc, si vous voulez suivre, je vous encourage à prendre la version 7.1 des outils. Vous y trouverez :

  • Microsoft Windows Phone Developer Tools 7.1 (Beta) — qui s’installeront sur une version Express de Visual Studio 2010 si vous n’avez pas ce dernier ou sur votre installation habituelle s’il est déjà sur votre machine.
  • L’émulateur Windows Phone (Beta)
  • Silverlight 4 SDK
  • Microsoft XNA Game Studio 4.0 Referesh Windows Phone Extensions
  • Microsoft Expression Blend SDK Preview pour Windows Phone 7.1
  • WCF Data Services Client pour Window Phone 7.1

Et ce sera tout pour aujourd’hui.

En attendant le billet de demain, je vous encourage à lancer Visual Studio et tester les nouveaux templates de projet qui sont apparus ; notamment ceux sous la catégorie Silverlight for Windows Phone dont le nom termine par Application. Vous pourrez les exécuter dans l’émulateur avec un simple Ctrl+F5 et commencer à vous familiariser avec.

On Jobs’s thoughts on Flash

Yesterday, our favourite black turtleneck-wearing guru published a short essay detailing his Thoughts on Flash, where he details why Adobe’s Flash will never by supported on his iPhones and iPads.

Recommended reading, definitively! It’s just hilarious.

I obviously have to admit that the iPhone, new Macs, etc. have sent Jobs soaring through the stratosphere. Unfortunately, I’m afraid his brain is now lacking oxygen… Lire la suite

Plus de C# sur l’iPhone ?

clip_image001Avec la sortie hier du SDK pour l’iPhone OS 4, Apple surprend les développeurs en modifiant un paragraphe clé dans sa licence d’utilisation. Jusque là le paragraphe 3.3.1. lisait :

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.

Formulé de cette manière, ce paragraphe empêche simplement les développeurs d’accéder aux fonctionnalités de l’iPhone qui ne sont pas exposées par les APIs publiques, documentées et donc supportées par Apple.

Cependant, le paragraphe en question a été légèrement remanié dans la dernière version de l’accord (je me permets de surligner quelques mots clés) :

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

Il n’est plus question uniquement de fonctionnalités ici, mais carrément du choix du langage de programmation. La liste est claire : si vous souhaitez développer pour l’OS 4, vos applications devront être écrites à l’origine en C, C++, Objective-C ou JavaScript—sinon, passez par une application web (ceci n’est pas dit explicitement, mais il est donc la seule alternative restante).

Que deviendra donc MonoTouch, la solution Novell qui permet d’écrire des applications en C# pour l’iPhone ? Certes, le compilateur MonoTouch génère du code natif à la fin, mais l’application n’a pas été écrite dans l’un des langages autorisés à l’origine et on utilise un outil intermédiaire pour générer l’application. La même question se pose pour le compilateur pour iPhone qui devrait sortir avec Flash Professional CS5 puisqu’il se comporte de manière similaire.

L’arrogance de la société de Cupertino est telle qu’ils n’ont probablement rien à faire de la restriction de liberté totalement infondée pour les développeurs, mais je suis déçu quand même.

Enfin, essayons de voir les choses d’un point de vue positif : un potentiel tremplin pour le développement sur Windows Phone 7 ? 😉

Interview avec Eric Mittelette aux TechDays 09

En février, lors de Microsoft TechDays à Paris, je n’ai pas assisté à une seule conférence (ce n’est pas grave, il y a toujours les webcasts) mais j’ai quand même pu arpenter le salon pendant trois jours pour rencontrer du monde entre autres pour la WebTV de SUPINFO.

J’ai fait, avec d’autres, plein d’interviews pour aborder à peu près tous les sujets : les communications unifiées, les femmes dans l’IT, les communautés, etc. L’épisode TechDays 2009 avait été mis en ligne il y a un moment, mais ma préférée reste quand même celle que j’ai fait d’Eric Mittelette (a.k.a. ericmitt), responsable du groupe pour les les relations techniques avec les développeurs chez Microsoft France. C’est normal, puisqu’on parle développement. C’est pour ça que j’ai récupéré les rushes et je l’ai reprise en entier pour la partager ici.

Je déteste ma voix sur la vidéo, mais j’adore la discussion avec Eric, que je remercie une fois de plus pour les minutes qu’il m’a accordées, même si je sais qu’il était extrêmement occupé pendant la conférence. Je vous laisse regarder :

Enfin, si le “développement vert” ou la “Green Dev Attitude” vous intéresse, voici la conférence Développement d’applications vertes dont parle Eric.

Et comme je sais que la plupart ne voudront pas aller chercher trop loin, voici aussi l’épisode complet de la Web TV:

Commandlets des Labs Azure sous Windows x64

powershell

J’étais en train de travailler sur les Hands on Labs du SDK Azure l’autre jour et il y en a un qui concerne une liste de tâches qu’un commandlet PowerShell bien pratique est censée préparer.

Le problème ?

Registering commandlets...
Add-PSSnapin : No Windows PowerShell Snap-ins are available for version 1.
At C:UsersMadd0DocumentsAzureServicesKit-FebLabsAdvancedSQLDataServicesAssetsSDSSetup.ps1:17 char:13
+ Add-pssnapin  <<<< AzureServicesManagement

Pourquoi n’y aurait-il pas de snap-in pour la version 1 ? Je vois la dll à côté et je ne peux que supposer que Microsoft va mettre à disposition du code qui marche.

Facile !

Comme beaucoup d’autres problèmes auxquels les développeurs doivent faire face pendant ces jours de transition du 32 au 64 bits, le snap-in manquant avait juste besoin d’être exécuté dans un environnement x86, mais je travaille sous Vista x64 (ouaip, un poil masochiste, je sais…).

La solution est donc très simple : ouvrez la console Windows PowerShell (X86) pour y exécuter la commande SDSCreateStorage.cmd—n’oubliez pas de l’exécuter en tant qu’Administrateur.