Connectivity version 12 pour WP8.1

« Microsoft.Smartdevice.Connectivity » est une librairie fournit par Microsoft qui permet de se connecter à Windows Phone (device ou emulateur) afin gérer les applications développeurs (installation, désinstallation, lancement) et de lire leurs IsolatedStorages.

Si vous êtes intéressé par le fonctionnement de base de cette DLL, vous pouvez relire cet article sur le sujet

La nouvelle version de Connectivity vient d’arriver avec le SDK WP8.1, c’est le moment de faire le point sur les nouveautés.
Malheureusement, cette librairie n’a pas, à ma connaissance, de page officielle mise à jour sur MSDN.
Je vais donc vous livrer les informations que j’ai pu recueillir en la décompilant et qui m’ont servies à mettre à jour mon application IsoStoreSpy.

De nouvelles racines

Globalement, la librairie fonctionne de la même manière que ses prédécesseurs mais une différence de taille est venu se glisser dans cette release.
En effet, Il est possible d’accéder, sous certaines conditions, à d’autre répertoire que celui de l’isolatedStorage.
Dans les cadres des applications WP8.1, trois racines sont désormais accessibles (contre une auparavant) :

– « Local » qui représente l’IsolatedStorage classique (valeur par défaut)
– « Roaming » qui permet d’accéder au données du Roaming
– « Temp » qui est un dossier temporaire

On accède donc à l’IsoStore en ajoutant simplement la chaine d’une des racines à la méthode GetIsolatedStore :

// WP8 old Style:
// var storage = SelectedApplication.GetIsolatedStore();

// WP8.1 new Style :
var storage = SelectedApplication.GetIsolatedStore("Roaming");

Et les apps WP8 ?

Malheureusement, les racines « Roaming » ou « Temp » ne sont pas accessibles des applications WP8 même sur un device WP8.1 (ce qui est facilement compréhensible vu qu’il n’y a pas d’accès niveau code).

Il faut donc une manière simple de détecter qu’une app est compiler pour WP8 ou pour WP8.1.

On va utiliser ici l’exception ArgumentException générer par l’accès aux méthodes de Connectivity dans un contexte de Roaming.

        public bool IsSelectedApplicationIsWP8
        {
            get
            {
                if( _IsSelectedApplicationIsWP8 == null )
                {
                    try
                    {
                        this.SelectedApplication.GetIsolatedStore("Roaming").GetDirectoryListing(string.Empty);
                        _IsSelectedApplicationIsWP8 = false;
                    }
                    catch (ArgumentException)
                    {
                        _IsSelectedApplicationIsWP8 = true;
                    }
                }

                return _IsSelectedApplicationIsWP8.Value;
            }
        }

        private bool? _IsSelectedApplicationIsWP8 = null;

On n’a plus qu’a tester IsSelectedApplicationIsWP8 pour voir si l’on peut afficher ou non les racines complémentaires.

Des chemins d’accès modifiés

Les chemins d’accès au répertoires et fichiers ont également été modifiés par l’utilisation de ces nouvelles racines :

ainsi pour les devices WP8 la racine de base de l’application était la suivante :

string root = @"%FOLDERID_APPID_ISOROOT%\" + APP_PRODUCT_ID + "\"

elle devient celle ci pour WP8.1 :

string root = @"%FOLDERID_APPID_ISOROOT%\" + APP_PRODUCT_ID + "\" + RACINE + "\" 

la chaine APP_PRODUCT_ID represente le GUID de l’app et RACINE une des chaines suivantes :

– « %LOCL% » pour la racine Local
– « %ROAM% » pour la racine roaming
– « %TEMP% » pour la racine temp

Détruire des fichiers

Une coquille c’était glisser dans la dernière version de Connectivity pour WP8. Il était impossible de détruire des fichiers.
C’est ennuyeux mais heureusement cette fonctionnalité est de nouveau opérationnelle !

conclusion

Je me doute que cet article ne servira qu’a très peu de personnes vu la nature des services de cette librairie mais sachez que plusieurs Bothans sont morts pour nous fournir ces informations.
Ca calme.

leave your comment