Windows Phone regorge d’APIs pour vous simplifier la vie et intégrer au mieux votre application dans le système. Si vous entendez que quelques lignes suffisent pour enregistrer un rendez-vous dans le calendrier de votre utilisateur, vous ne rêvez pas ! Nous ferons le tour des différents services à disposition pour créer facilement une belle expérience dans votre application : Géolocalisation, Cartographie, intégration dans les contacts, App to App, Speech, etc.
Géolocalisation, Speech, Intégration : Tirez parti des nouveautés de Windows Phone 8
1. Donnez votre avis !
Depuis votre smartphone, sur :
http://notes.mstechdays.fr
De nombreux lots à gagner toutes les heures !!!
Claviers, souris et jeux Microsoft…
Merci de nous aider à améliorer les TechDays
http://notes.mstechdays.fr
2. Géolocalisation, Speech, Intégration
Tirez parti des nouveautés de Windows Phone 8
Samuel Blanchard
Windows Phone MVP - Naviso
@samoteph
Julie Knibbe
Technical Evangelist - Microsoft France
@julieknibbe
Jean-Sébastien Dupuy
Technical Evangelist - Microsoft France
@dupuyjs
Phone / mobilité
4. Quelles sont les autres nouveautés ?
Trucs et astuces pour rendre votre application Windows
Phone 8 plus visible
Mardi 12 février : 16h00-17h00 (niveau : 200)
Plus près, plus près… NFC et la communication à proximité
dans Windows 8 et Windows Phone 8
Jeudi 14 février : 14h30-15h30 (niveau : 200)
Tirez parti des nouveautés de Windows Phone 8
5. De quoi parle cette session?
Contrôles, Résolutions Text To Speech
Launchers Reconnaissance Vocale
Cartographie Communication App To App
Tirez parti des nouveautés de Windows Phone 8
6. Tirez parti des nouveautés de Windows Phone 8
CONTRÔLES
Phone
7. LongListSelector
• Utilisez LongListSelector en lieu et place du
ListBox
– Mêmes fonctionnalités mais meilleures
performances
• Les bénéfices additionnels
– Grouped Lists (IsGroupingEnabled)
– Jump List pour faciliter le déplacement
entre les groupes, même comportement
que le Contact Hub
Tirez parti des nouveautés de Windows Phone 8
8. LongListSelector
CONTRÔLES
Tirez parti des nouveautés de Windows Phone 8
9. Contrôles
• LongListSelector, Pivot et Panorama placés en ROM
– Amélioration globale des performances
– Empreinte mémoire du Panorama plus réduite
• Le contrôle WebBrowser repose désormais sur
Internet Explorer 10
– Supporte HTML5
• Windows Phone Toolkit (Octobre 2012)
– Téléchargez WPToolkit depuis NuGet
– Contrôles PhoneTextBox, HubTile, …
Tirez parti des nouveautés de Windows Phone 8
10. Tirez parti des nouveautés de Windows Phone 8
RÉSOLUTIONS D’ÉCRAN
Phone
11. Résolutions d’écran
WVGA WXGA 720p
800 x 480 1280 x 768 1280 x 720
15:9 15:9 16:9
Tirez parti des nouveautés de Windows Phone 8
12. Résolutions d’écran
• Adaptez votre Layout !!
– Evitez de fixer les valeurs des propriétés Width et Height,
attention aux alignements et marges
– Privilégiez l’utilisation des Grilles et des formats * et Auto
• Graphiques
– Utilisez les images ciblant la résolution WXGA, le téléphone
adapte correctement ce format en fonction de la résolution
– Pour allez plus loin, App.Current.Host.Content.ScaleFactor
pour charger les graphiques appropriés
Tirez parti des nouveautés de Windows Phone 8
13. Résolutions d’écran
public enum Resolutions { WVGA, WXGA, HD720p };
public static class ResolutionHelper
{
private static bool IsWvga { get { return App.Current.Host.Content.ScaleFactor == 100; } }
private static bool IsWxga { get { return App.Current.Host.Content.ScaleFactor == 160; } }
private static bool Is720p { get { return App.Current.Host.Content.ScaleFactor == 150; } }
public static Resolutions CurrentResolution
{
get {
if (IsWvga) return Resolutions.WVGA;
else if (IsWxga) return Resolutions.WXGA;
else if (Is720p) return Resolutions.HD720p;
else throw new InvalidOperationException("Unknown resolution");
}
}
}
Tirez parti des nouveautés de Windows Phone 8
14. Résolutions d’écran
using System.Windows.Media.Imaging;
public class MultiResImageChooserUri
{
public Uri BestResolutionImage {
get {
switch (ResolutionHelper.CurrentResolution) {
case Resolutions.HD720p:
return new Uri("Assets/MyImage.screen-720p.jpg", UriKind.Relative);
case Resolutions.WXGA:
return new Uri("Assets/MyImage.screen-wxga.jpg", UriKind.Relative);
case Resolutions.WVGA:
return new Uri("Assets/MyImage.screen-wvga.jpg", UriKind.Relative);
default:
throw new InvalidOperationException("Unknown resolution type"); } } }
}
Tirez parti des nouveautés de Windows Phone 8
15. Tirez parti des nouveautés de Windows Phone 8
LAUNCHERS & CHOOSERS
Phone
16. Nouveaux Launchers
• Meilleur moyen d’interagir avec les fonctionnalités natives du téléphone, ils
permettent d’effectuer des tâches comme :
– Prendre une photo
– Ajouter un contact
– Envoyer un Mail ou un SMS
– Etc…
• Nouveaux Launchers sous Windows Phone 8 :
– SaveAppointmentTask : Ajout d’un nouveau rendez-vous dans le calendrier.
– ShareMediaTask : Partagez vos medias !
– MapsTask : Cherchez les points d’intérêts autours de vous !
– MapsDirectionsTask : Perdu ? Obtenez votre itinéraire …
Et MapDownloaderTask, MapUpdaterTask dans la suite du programme.
• Attention au Tombstoning
Tirez parti des nouveautés de Windows Phone 8
18. Tirez parti des nouveautés de Windows Phone 8
CARTOGRAPHIE
Phone
19. Les nouveautés en Géolocalisation
• Nouvelle API Windows Phone Runtime
location
Convergente avec l’API Windows 8 location
– API Windows Phone 7.1 supportées
– System.Device.Location.GeoCoordinateWatcher et
autres
Tirez parti des nouveautés de Windows Phone 8
20. Avant toute chose…
2 conditions pour avoir le droit de parler aux Location API :
• Le déclarer dans le manifest de l’application :
ID_CAP_LOCATION
• Demander l’accord de l’utilisateur
Tirez parti des nouveautés de Windows Phone 8 20
21. Où se cache mon utilisateur ?
• Connaître la position du téléphone juste
une fois :
Geolocator.GetGeopositionAsync
• Tracker les changements de position :
Geolocator.PositionChanged &&
Geolocator.StatusChanged
Tirez parti des nouveautés de Windows Phone 8
22. Contrôler les sources utilisées ?
• No possiblo
• Utilisez la propriété DesiredAccuracy du Geolocator
(high / default) ou DesiredAccuracyInMeters
• Dans tous les cas, c’est lui qui décide
- Accuracy
+ Power WiFi GPS
+ Speed
- Wilderness +/- Accuracy + Accuracy
+/- Power - Power
+/- Speed - Speed
+/- Urban areas - Indoors
Tirez parti des nouveautés de Windows Phone 8
4/15/2013 ‹#›
23. Localisation 1 Shot avec
GetGeopositionAsync
private async void OneShotLocation_Click(object sender, RoutedEventArgs e)
{
Geolocator geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 50;
try
{
Geoposition geoposition = await geolocator.GetGeopositionAsync(
maximumAge: TimeSpan.FromMinutes(5),
timeout: TimeSpan.FromSeconds(10)
);
LatitudeTextBlock.Text = geoposition.Coordinate.Latitude.ToString("0.00");
LongitudeTextBlock.Text = geoposition.Coordinate.Longitude.ToString("0.00");
}
catch (UnauthorizedAccessException)
{
// the app does not have the right capability or the location master switch is off
StatusTextBlock.Text = "location is disabled in phone settings.";
}
}
Tirez parti des nouveautés de Windows Phone 8
25. Votre application passe à l’état Dormant, so
what?
• Un nouvel état de l’application : RunningInBackground
• Actif tant que l’application continue de tracker la position
running
activated deactivat
Running deactivated
ed
in bckgd
suspend
tombstoned ed
Tirez parti des nouveautés de Windows Phone 8
26. Que faire dans cet état ?
(RunningInBackground)
• Arrêter tout ce qui ne concerne pas la localisation
• Ne pas toucher à l’UI (ça sert à rien)
<Application.ApplicationLifetimeObjects>
<!--Required object that handles lifetime events for the application-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing“
Activated="Application_Activated" Deactivated="Application_Deactivated“
RunningInBackground="Application_RunningInBackground"/>
</Application.ApplicationLifetimeObjects>
Tirez parti des nouveautés de Windows Phone 8
28. Afficher une carte dans Windows Phone 8
• Données Nokia
110+ pays, cartes vectorielles
• Cartes offline
Launchers MadDownloader/MapUpdater
• Calcul d’itinéraires / Géocodage
– via Maps Services
• Dépréciation de l’ancient Bing Map Control
Tirez parti des nouveautés de Windows Phone 8
29. Cartographic Mode
Road (default) Aerial Hybrid Terrain
Tirez parti des nouveautés de Windows Phone 8 31
30. ColorMode : Light ou Dark ?
Tirez parti des nouveautés de Windows Phone 8 32
32. Où sont passés les pushpins ?
• Partis !
• 2 solutions :
• Créer des pushpins custom en dessinant
un UIElement dans un MapOverLay à
ajouter dans un MapLayer, à ajouter
dans Map.Children. C’est tout.
• Utiliser le composant Pushpin fourni
dans Windows Phone Toolkit
Tirez parti des nouveautés de Windows Phone 8 34
33. Tirez parti des nouveautés de Windows Phone 8
TEXT2SPEECH
Phone
34. Text2Speech – Les bases
• Qu’est ce que c’est ?
• Mise en place :
• Manifest : - ID_CAP_SPEECH_RECOGNITION
• Classe – SpeechSynthesizer + SpeakTextAsync
• Mise en queue
• InstalledVoices : Langue & Genre (SetVoice)
• Sur Device : Langue à installer manuellement
Tirez parti des nouveautés de Windows Phone 8
35. Text2Speech – Technique avancée
• Le SSML = fichier XML
• Mise en place :
• Le header <speak/>
• Le tag Voice : Langue + Genre
• Le tag Prosody : Manière de parler
• Le tag Audio : Ajouter un wav
Tirez parti des nouveautés de Windows Phone 8
36. Speech – Les bases + Avancés
Tirez parti des nouveautés de Windows Phone 8 38
37. Text2Speech – Exemple d’utilisation
• Accessibilité au malvoyant
• SpeechBehavior
xmlns:behaviors="clr-
namespace:SamuelBlanchard.Accessibility"
behaviors:SpeechBehavior.CanSpeak="True"
behaviors:SpeechBehavior.Language="fr-FR"
• Téléchargement :
– http://blog.naviso.fr/wordpress/?p=1573
Tirez parti des nouveautés de Windows Phone 8
39. Tirez parti des nouveautés de Windows Phone 8
SPEECHRECOGNITION
Phone
40. Recognition – Les bases
• Qu’est ce que c’est ?
• Nécessite internet
• Manifest :
• ID_CAP_SPEECH_RECOGNITION,
• ID_CAP_MICROPHONE,
• ID_CAP_NETWORKING
• Avec Boite de dialogue : SpeechRecognizerUI
• Sans Boite : SpeechRecognizer
• InstalledSpeechRecognizers : Langue & Genre
(SetRecognizer)
• Sur device : Langue à installer manuellement +
Autorisation
Tirez parti des nouveautés de Windows Phone 8
41. Recognition – Résultat
• Une chaine de caractère
• Un indice de confiance :
– Hight
– Low
– Medium
– Rejected
Tirez parti des nouveautés de Windows Phone 8
42. Recognition – Avancé
• Gérer la grammaire de son application (préfixé en
AddGrammar)
• FromPredefinedType: Dictation (defaut) ou
WebSearch
• FromList: Ne regade que dans cette liste sinon
Rejected
• FromUri : Fichier SRGS grammars : .grxml
sr.Grammars.AddGrammarFromPredefinedType("webSearch
", SpeechPredefinedGrammar.WebSearch);
Tirez parti des nouveautés de Windows Phone 8
43. Speech – Monsieur et Madame !
Tirez parti des nouveautés de Windows Phone 8 45
44. Tirez parti des nouveautés de Windows Phone 8
APP TO APP COMMUNICATION
Phone
45. AppToApp – Les bases
• Qu’est ce que c’est ?
• Association d’URI ou extension de Fichier
• Les URI système : (exemples)
– Mode Avion : ms-settings-airplanemode:
– Panneau BlueTooth : ms-settings-bluetooth:
• Le lancement :
– Launcher. LaunchUriAsync(new Uri(monUri))
Tirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode:
Launch Bluetooth Settings Page ms-settings-bluetooth:
46. AppToApp – Avancé
• Mise en place : association URI
– Format de l’URI -> protocole:paramètres
– Manifest :
<Extensions>
<Protocol Name="techdays2013"
NavUriFragment="encodedLaunchUri=%s"
TaskID="_default" />
</Extensions>
– URI commence par /protocole
– UriMapper pour router l’uri (qui n’est pas une page)
– OnNavigatedTo => traitement de l’uri
Tirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode:
Launch Bluetooth Settings Page ms-settings-bluetooth:
47. AppToApp – Code UriMapper
public override Uri MapUri(Uri uri)
{
// on decode la chaine pour recupérer le protocole original
string uriString = HttpUtility.UrlDecode(uri.ToString());
const string uriTechdays = "/Protocol?encodedLaunchUri=techdays2013:///";
if (uriString.StartsWith(uriTechdays))
{
// On recupère tout se qui suit le ? (le ? étant inclus)
string query = uriString.Substring(uriTechdays.Length);
return new Uri("/SpeechRecognitionPage.xaml" + query, UriKind.Relative);
}
return uri;
}
RootFrame.UriMapper = new AssociationUriMapper();
Tirez parti des nouveautés de Windows Phone 8 ms-settings-airplanemode:
Launch Bluetooth Settings Page ms-settings-bluetooth:
48. AppToApp – Je m’auto-lance !
Tirez parti des nouveautés de Windows Phone 8 50
49. Et ensuite ?
Trucs et astuces pour rendre votre application Windows Phone 8
plus visible
Mardi 12 février : 16h00-17h00 (niveau : 200)
Cycle de vie d'une application Windows 8 et Windows Phone 8
Mardi 12 février : 16h00-17h00 (niveau : 300)
L'histoire d'HTML5 pour les développeurs Windows Phone 8
Mercredi 13 février : 16h00-17h00 (niveau : 200)
50. Et ensuite ?
Booster votre application Windows Phone 8
Mercredi 13 février : 17h30-18h30 (niveau : 300)
Bien soumettre et monétiser votre application Windows 8 et
Windows Phone 8
Jeudi 14 février : 11h00-12h00 (niveau : 200)
Plus près, plus près… NFC et la communication à proximité dans
Windows 8 et Windows Phone 8
Jeudi 14 février : 14h30-15h30 (niveau : 200)
51. Développeurs Pros de l’IT
http://aka.ms/generation-app Formez-vous en ligne www.microsoftvirtualacademy.com
http://aka.ms/evenements-
developpeurs Retrouvez nos évènements http://aka.ms/itcamps-france
Les accélérateurs
Faites-vous accompagner
Windows Azure, Windows Phone,
gratuitement
Windows 8
Essayer gratuitement nos http://aka.ms/telechargements
solutions IT
La Dev’Team sur MSDN Retrouver nos experts L’IT Team sur TechNet
http://aka.ms/devteam Microsoft http://aka.ms/itteam
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
The application can use the Geolocator.DesiredAccuracy property to control the data accuracy level it expects the Geolocation API to provide. The Geolocator.DesiredAccuracy property’s value can be either Default or High. The app should only request High accuracy location data when it is necessary. Why? In general it consumes more battery power and network bandwidth to achieve higher data accuracy. Some high accuracy location services may also involve monetary charges by the wireless network operators.When receiving the location data from Windows Phone Runtime, the app can check the Accuracy property of the Geocoordinate object to determine if the accuracy (in meters) fits the app’s needs.
This method initializes the Geolocator object and sets the DesiredAccuracyInMeters property. Next, the GetGeopositionAsync method is called. This method attempts to obtain the phone’s current location. It does this asynchronously so that the UI thread is not blocked while the location is obtained. You can use the await operator to place code after the asynchronous call that will be executed after the call finishes. This requires this handler method to be declared async. The whole location operation is wrapped in a try block in case any exceptions are thrown. If an UnauthorizedAccessException exception is thrown while you are developing, it could mean that you haven’t included ID_CAP_LOCATION in your app manifest. If this happens after your app has been deployed, it may mean that the user has disabled location for this app in the phone Settings.In the call to Geolocator.GetGeopositionAsync, the parameters havethe following meaning:maximumAge: If a location is in the cache and its age is less than or equal to this parameter, the cached value is returned rather than a new position retrievedTimeout: If a cached location is not available, this timeout applies to attempts to get a new position fix. A TimeoutExceeded exception is thrown if no position can be retrieved within this time limit.
++ Cartographie meilleure et plus rapide car :VectorielUtilise les cartes offline
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
LE CODE D’ABORD !
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.
COOODE !
Les blocs de couleurs sont éditables et peuvent reprendre la couleur du type de session qui est donnée.Idem pour les textes. Exemple pour le phone.