[WP7] Le SDK Windows Phone 7.8 est disponible

Le 24 janvier 2013 à 15:17

Comme vous le savez certainement, le déploiement de la mise à jour 7.8 sur les terminaux Windows Phone 7 serait imminent. Microsoft a donc publié la mise à jour du SDK pour Windows Phone 7.8 il y a deux jours.

windows-phone-7-8-lumia

Quelles sont les nouveautés  pour les développeurs ?

L’ajout de deux émulations relatifs à Windows Phone 7.8, l’un pour les terminaux avec 512MO et l’autre pour 256MO. Il n’y a pas de nouveautés dans les API. Microsoft précise surtout que les émulateurs ont été ajoutés surtout pour vérifier le bon fonctionnement des applications en version 7.5 (voir le comportement des Live Tiles par exemple).

Il est bon de savoir également de rappeler que toutes les applications développées avec les versions antérieures à WP8 seront compatibles avec celui-ci. Donc pour le moment, et c’est mon avis, il est préférable d’assurer une compatibilité de ses applications avec les versions antérieures à WP8, pour pouvoir toucher un maximum de terminaux.
Pour télécharger le nouveau SDK, ça se passe par ici.

A bientôt !

[WPF] Designer WPF 4.5 sur Blend pour Visual Studio 2012 ?

Le 19 janvier 2013 à 08:53

Récemment, Microsoft a annoncé l’arrêt de la gamme Expression. Cette gamme était disponible dès 2007 et permettait aux développeurs et aux designers de travailler main dans la main (ou dans la pratique, aux développeurs de désigner facilement leurs applications :-)).
Cette gamme regroupait plusieurs produits, et entre autre Expression Blend, qui était l’outil parfait pour travailler sur nos interfaces à travers plusieurs technologies : WPF et Silverlight.

A présent, Blend est disponible directement avec Visual Studio 2012. Mais il est permet, pour le moment, de ne travailler uniquement que sur des interfaces pour Windows 8 et Windows Phone. Assez problématique si l’on travaille avec la dernière version du Framework et WPF. Il reste la possibilité de travailler avec une ancienne version de Blend, mais on perd l’avantage de travailler avec la version 4.5 du Framework.
Il est vrai que le moteur de Visual Studio 2012 a été grandement amélioré et permet de designer plus facilement le XAML, mais ça reste loin de la facilité que nous apporte Blend.

La bonne nouvelle, c’est que Microsoft travaille sur une update 2 de Visual Studio intégrant une mise à jour pour Blend et apportant le support de WPF et Silverlight sur cette dernière mouture !

Si vous avez besoin de travailler tout de suite avec une version de Blend intégrant WPF 4.5, vous pouvez télécharger une version preview ici.

image

[WP7] Utilisation du mode Trial

Le 10 août 2011 à 11:12

Le mode trial permet aux utilisateurs de tester votre application avant de l’acheter. C’est à dire qu’on va pouvoir brider des fonctionnalités afin d’attirer l’utilisateur vers la version payante. Sa mise en place est très simple, il suffit de vérifier si le mode trial est actif sur l’application en cours, pour cela il faut utiliser la classe LicenseInformation qui contient la propriété IsTrial (pour XNA, il faut regarder du côté de Guide.IsTrialMode) :

public static Boolean IsTrial
{
    get 
    {
        LicenseInformation license = new LicenseInformation();
        return license.IsTrial();
    }
}

 

Pour que ce soit pratique en développement, on peut faire de la compilation conditionnelle en renvoyant la valeur “true” si on est en mode debug :

public static Boolean IsTrial
{
    get 
    {
        #if DEBUG
            return true;
        #endif

        LicenseInformation license = new LicenseInformation();
        return license.IsTrial();
    }
}

 

Ensuite, il devient très simple d’effectuer des actions selon la lience en cours :

if(IsTrial)
{
    // afficher message si mode trial, 
    // par exemple l'ajout d'infos limité à 5 items
}

// action si pas trial
// ...

 

A bientôt !

[WP7] Localisez le titre de votre application

Le 9 août 2011 à 15:45

Nous avons vu récemment la globalisation de son application mais vous aurez surement remarqué qu’il n’était pas possible de localiser le titre de l’application. C’est à dire le Tile de l’application comme illustré ci-dessous :

image

Pour faire cela, il va falloir créer une dll AppResLib qui est en fait une dll ressource Win32 classique. La procédure n’est pas compliqué mais ne ressemble pas à ce qu’on a l’habitude de faire sur WP7 ;).

Donc, il faut ajouter un projet Win32 à notre solution :

image

 

Dans la fenêtre de l’assistant, choisir comme type d’application “dll” et comme option supplémentaire “projet vide” :

image

 

Ensuite, une fois le projet crée, il faut se rendre dans ses propriétés (clique droit, propriétés) puis se rendre dans “Editeur de liens” > “Avancé” et choisir en “Aucun point d’entrée” la valeur “oui (/NOENTRY)”.

image

 

Maintenant il va falloir ajouter un langage “neutre” en ressource à la DLL (par exemple le français, celle qui sera affichée par défaut si la ressource de langue n’est pas disponible), pour cela, il faut ajouter une ressource et dans celle ci une String Table contenant deux valeurs :

 

image

 

image

 

image

Comme indiqué dans l’image ci-dessus, il y aura deux valeurs “AppTitle” qui sera le nom de l’application dans la liste des applications et “AppTileString” qui sera le nom affiché dans la mosaïque des applications sur l’écran d’accueil.

 

Une fois le langage neutre créé, on va compilé la ressource et l’incorporé dans notre projet WP7. Il suffit de localiser la DLL générée et la copier dans la racine du projet WP7 :

image

 

Maintenant on va ajouter une langue supplémentaire, c’est à dire l’anglais, il suffit d’éditer la ressource de la DLL et d’y remplacer les valeurs par celles traduites en anglais :

image

 

Ensuite on va recompiler la dll et la copie la racine de notre projet WP7 mais en la renommant AppResLib.dll.0409.mui (US)

Voici les diférents codes selon les langues :

English (United States) (0x409) (/l 0x0409) / AppResLib.dll.0409.mui

English (United Kingdom) (0x809) (/l 0x0809) / AppResLib.dll.0809.mui

French (France) (0x40c) (/l 0x040c) / AppResLib.dll.040c.mui

German (Germany) (0x407) (/l 0x0407) / AppResLib.dll.0407.mui

Italian (Italy) (0x410) (/l 0x0410) / AppResLib.dll.0410.mui

Spanish (Spain) (0xc0a) (/l 0x0c0a) / AppResLib.dll.0c0a.mui

 

Ce qui donnera à notre racine :

image

 

Voila, nos ressources sont prêtes. Il faut à présent indiquer au téléphone qu’il existe ces ressources.

Tout d’abord on va ajouter ces fichiers au projet :

image

Puis dans les propriétés de ces fichiers, on va définir en action de génération la valeur “contenu” (donc ces Dll seront copiées dans le XAP) :

image

 

Maintenant, il faut modifier le fichier WMAppManifest.xml dans le projet (clique droit sur Propriétés, le fichier est là) :

image

Il faut ensuite recherche dans App le Title de votre application et remplacer par “@AppResLib.dll,-100”, puis dans PrimaryToken, recherche le Title et remplacer par “@AppResLib.dll,-200”

Voici le fichier à quoi il devrait ressembler :

<?xml version="1.0" encoding="utf-8"?>

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" 
AppPlatformVersion="7.0">
  <App xmlns="" ProductID="{f12ae759-54b6-49fe-84b9-94a60ac066c2}" 
       Title="@AppResLib.dll,-100" 
       RuntimeType="Silverlight" 
       Version="1.0.0.0" 
       Genre="apps.normal" 
       Author="SampleApp author"
       Description="Sample description"
       Publisher="SampleApp">
    <IconPath IsRelative="true" IsResource="false">ApplicationIcon.jpg</IconPath>
    <Capabilities>
      <Capability Name="ID_CAP_GAMERSERVICES"/>
      <Capability Name="ID_CAP_IDENTITY_DEVICE"/>
      <Capability Name="ID_CAP_IDENTITY_USER"/>
      <Capability Name="ID_CAP_LOCATION"/>
      <Capability Name="ID_CAP_MEDIALIB"/>
      <Capability Name="ID_CAP_MICROPHONE"/>
      <Capability Name="ID_CAP_NETWORKING"/>
      <Capability Name="ID_CAP_PHONEDIALER"/>
      <Capability Name="ID_CAP_PUSH_NOTIFICATION"/>
      <Capability Name="ID_CAP_SENSORS"/>
      <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/>
    </Capabilities>
    <Tasks>
      <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
    </Tasks>
    <Tokens>
      <PrimaryToken TokenID="SampleAppToken" TaskName="_default">
        <TemplateType5>
          <BackgroundImageURI IsRelative="true" 
                                        IsResource="false">Background.jpg</BackgroundImageURI>
          <Count>0</Count>
          <Title>@AppResLib.dll,-200</Title>
        </TemplateType5>
      </PrimaryToken>
    </Tokens>
  </App>
</Deployment>

 

Voila c’est terminé, un peu long mais ce n’est pas compliqué :)

A bientôt !

[WP7] Mango : créer une application de streaming Radio avec AudioPlayerAgent

Le 8 août 2011 à 20:42

Actuellement sous WP7 Nodo, lorsque vous utilisez une application autre que Zune pour la lecture audio (application radio, Deezer, application GPS… etc) l’audio s’arrête à partir du moment où vous switchez sur une autre application : elle ne continue  donc pas de jouer en background.

Avec Mango, il est désormais possible de le faire. Pour cela, il faut utiliser un Agent disponible sur le dernier SDK 7.1 : AudioPlayerAgent. Cet agent va nous permettre de contrôler ce qui va être jouer et d’interagir selon ce que l’utilisateur va faire (boutons lecture/pause, morceau précédent/suivant) et ce qu’on va afficher (titre, nom de l’album, image de l’album… etc).

Ici, je vais créer une mini application (simple) de streaming d’une radio. Bien entendu il pourrait être complexifié pour y ajouter le contrôle de plusieurs flux de radio. Mais en voyant l’exemple, vous comprendrez que c’est très facilement adaptable :).

Pour commencer, on va créer une application WP7.1, puis on va y ajouter un projet Windows Phone Audio Playback Agent :

image

Le template va nous créer une classe qu’on va compléter. Cette classe dérive de AudioPlayerAgent. La classe surcharge les méthodes OnPlayStateChanged (à chaque fois qu’on change l’état du track), OnUserAction (quand l’utilisateur appuie sur un bouton) et OnError (quand une exception est déclenché).

Il faut savoir qu’une source de flux est définie par la classe AudioTrack.
On va déjà définir un AudioTrack pointant vers notre flux radio (ici France Info):

private static readonly AudioTrack Track =
    new AudioTrack(
     new Uri(@"http://mp3.live.tv-radio.com/franceinfo/all/franceinfo.mp3", UriKind.Absolute),
     "France Info live", "France Info", "France Info podcast", null, null, 
     EnabledPlayerControls.Pause);

 

EnabledPlayerControls va nous permettre de choisir les actions qui seront possibles pour l’utilisateur, ici j’ai désactivé la possible de faire suivant et précédent.
Maintenant on va écrire le code de la méthode surchagée OnUserAction. Cela nous permettra selon l’action demandé de mettre en pause le flux ou de le lire, selon ce que l’utilisateur a souhaité faire :

protected override void OnUserAction(BackgroundAudioPlayer player,
AudioTrack track, UserAction action, object param)
{
    switch (action)
    {
        case UserAction.Play:
            if (PlayState.Paused == player.PlayerState)
            {
                player.Play();
            }
            else
            {
                player.Track = Track;
            }
            break;

        case UserAction.Pause:
            player.Pause();
            break;
    }
    
    NotifyComplete();
}

 

Maintenant on va s’occupé de la méthode OnPlayStateChanged, qui va nous permettre d’éffectuer des actions selon le Playstate :

switch (playState)
{
    case PlayState.TrackReady:
        player.Play();
        break;
}

NotifyComplete();

 

Et voila, c’est quasiment terminé pour notre agent !

Du côté du projet WP7, pour pouvoir manipuler l’agent, il suffit d’utiliser la classe BackgroundAudioPlayer :

Pour lire :

BackgroundAudioPlayer.Instance.Play();

 

Pour supprimer la lecture :

BackgroundAudioPlayer.Instance.Close();

 

P1040263-(1)

 

Lorsque vous serez sur le home screen, vous aurez l’information de la lecture en cours, et lorsque vous serez sur l’accueil et que vous utilisez les boutons de volume, vous aurez également l’information du morceau en cours. 

Pour télécharger les sources, c’est par ici.
A bientôt !

A propos de l'auteur

Mathieu Perrein - Software Solutions Manager, Software Architect, Trainer MCT, MSP de 2010 à 2012.

 

MSP

 

MSP

MSP

 MSPD

MCT

 

Facebook

 

Ce blog est strictement personnel et les opinions exprimées ici n'engagent donc que moi, et pas mon employeur.

Tags

Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version de Flash Player.