Developpement Windows Phone - partie 21

L’Isolated Storage

Cet article fait partie d’une série d’articles sur le développement Windows Phone. Il s’agit d’une traduction des articles se trouvant sur la MSDN.

Sommaire

Bien débuter et fondamentaux

Visuels et média

Travailler avec les données

Sondes et autres fonctionnalités spécifiques au téléphone


L’Isolated Storage

Dans Silverlight pour Windows Phone 7, il n’y a pas d’accès direct au système de fichier sur le périphérique. Cela signifie que vous ne pouvez pas sauvegarder ou accéder aux données n’importe où. Toutefois, Silverlight fournit pour chaque application un mécanisme de sauvegarde et d’accès aux données à une zone spécifique auquelle seule l’application peut accéder. Cet accès IO est appelé l’Isolated Storage, et vous pouvez l’utiliser pour enregistrer et récupérer des données localement sur votre appareil Windows Phone.

Ce tutoriel montre comment utiliser l’Isolated Storage sur un périphérique Windows Phone

Ce tutoriel contient les sections suivantes:

Introduction à l’Isolated Storage

L’Isolated Storage crée un système de fichiers virtuel auquel seule l’application associée peut avoir accès. Cela signifie qu’une application peut sauvegarder et récupérer des données dans son Isolated Storage, mais elle ne peut pas accéder aux données d’autres Isolated Storage appartenant à d’autres applications.

L’Isolated Storage est constitué d’un ou de plusieurs fichiers de stockage, appelés magasins, qui contiennent l’emplacement du répertoire courant où les données sont stockées.

Il y a deux façons d’utiliser l’Isolated Storage. La première façon et la plus simple est de sauvegarder ou de récupérer les données comme paire clé/valeur à partir d’un dictionnaire en utilisant la classe IsolatedStorageSettings. La deuxième façon est de sauvegarder ou récupérer des fichiers en utilisant la classe IsolatedStorage. Les classes IsolatedStorageSettings et IsolatedStorageFile sont situées dans le namespace System.IO.IsolatedStorage, vous ajouterez donc une directive using pour ce namespace.

Travailler avec des paires clé/valeur

Pour sauvegarder ou récupérer des données comme paires clé/valeur, vous utilisez la classe IsolatedStorageSettings. Cette classe est un dictionnaire qui vous permet de stocker des objets, telles que des chaînes de caractères (String). Celle-ci est idéalement adaptée pour sauvegarder des « morceaux de données », tels que les paramètres des applications, dont vous avez besoin au démarrage et à la sortie de l’application. Les deux scénarios où cela est commun sont lorsqu’une application est démarrée ou arrêtée par l’utilisateur, et lorsqu’une application est « tombstonée » (soit désactivée). Pour plus d’informations sur le tombstoning, voir l’article MSDN sur l’ensemble d’exécution du modèle pour Windows Phone

De manière générale, vous utiliserez les méthodes suivantes de la classe IsolatedStorageSettings:

  • Add: Ajoute une entrée dans le dictionnaire pour la paire clé / valeur
  • Contains: Détermine si le dictionnaire contient la clé spécifiée
  • Remove: Supprime l’entrée avec la clé spécifiée.

L’image suivante montre un exemple d’application qui ajoute, récupère, et supprime une paire clé/valeur de l’IsolatedStorage.

image

L'exemple suivant montre comment ajouter une paire clé / valeur. Une instance de l’ IsolatedStorageSettings est créée à partir de la propriété ApplicationSettings. Une clé nommée «UserData» est créée dans le dictionnaire. La valeur de «UserData» est affectée à la propriété Text d’un TextBox. Enfin, les paramètres sont enregistrés en utilisant la méthode Save.

C#

Code Snippet

  1. private void btnSaveSetting_Click(object sender, RoutedEventArgs e)
  2. {
  3.     IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
  4.     // txtInput is a TextBox defined in XAML.
  5.     if (!settings.Contains("userData"))
  6.     {
  7.         settings.Add("userData", txtInput.Text);
  8.     }
  9.     else
  10.     {
  11.         settings["userData"] = txtInput.Text;
  12.     }
  13.     settings.Save();
  14. }

Visual Basic

Code Snippet

  1. Private Sub btnSaveSetting_Click(sender As Object, e As RoutedEventArgs)
  2.     Dim settings As IsolatedStorageSettings = IsolatedStorageSettings.ApplicationSettings
  3.     ' txtInput is a TextBox defined in XAML.
  4.     If Not settings.Contains("userData") Then
  5.         settings.Add("userData", txtInput.Text)
  6.     Else
  7.         settings("userData") = txtInput.Text
  8.     End If
  9.     settings.Save()
  10. End Sub

L'exemple suivant montre comment récupérer les données d'une paire clé / valeur. Cette donnée est accessible directement à partir de la propriété ApplicationSettings. La propriété Text d'un TextBlock est définie à la valeur de la clé «UserData ».

C#

Code Snippet

  1. private void btnDisplaySetting_Click(object sender, RoutedEventArgs e)
  2. {
  3.     // txtDisplay is a TextBlock defined in XAML.
  4.     txtDisplay.Text = "USER DATA: ";
  5.     if (IsolatedStorageSettings.ApplicationSettings.Contains("userData"))
  6.     {
  7.         txtDisplay.Text += IsolatedStorageSettings.ApplicationSettings["userData"] as string;
  8.     }
  9. }

Visual Basic

Code Snippet

  1. Private Sub btnDisplaySetting_Click(sender As Object, e As RoutedEventArgs)
  2.     ' txtDisplay is a TextBlock defined in XAML.
  3.     txtDisplay.Text = "USER DATA: "
  4.     If IsolatedStorageSettings.ApplicationSettings.Contains("userData") Then
  5.         txtDisplay.Text += TryCast(IsolatedStorageSettings.ApplicationSettings("userData"), String)
  6.     End If
  7. End Sub

L'exemple suivant montre comment supprimer une paire clé / valeur. Cette donnée est accessible directement à partir de la propriété ApplicationSettings. La clé «UserData" est retirée du dictionnaire en utilisant la méthode Remove.

C#

Code Snippet

  1. private void btnRemoveSetting_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             if(IsolatedStorageSettings.ApplicationSettings.Contains("userData"))
  4.             {
  5.                 IsolatedStorageSettings.ApplicationSettings.Remove("userData");
  6.             }
  7.         }

Visual Basic

Code Snippet

  1. Private Sub btnRemoveSetting_Click(sender As Object, e As RoutedEventArgs)
  2.     If IsolatedStorageSettings.ApplicationSettings.Contains("userData") Then
  3.         IsolatedStorageSettings.ApplicationSettings.Remove("userData")
  4.     End If
  5. End Sub

Travailler avec les fichiers

Pour sauvegarder ou récupérer des fichiers, vous utiliserez la classe IsolatedStorageFile. Cette classe représente une zone de stockage isolée qui contient des fichiers et des répertoires. Lorsque vous travaillez avec des fichiers, vous utilisez généralement la classe IsolatedStorageFileStream pour lire et écrire le contenu dans le fichier. Vous utiliserez généralement les méthodes suivantes de la classe IsolatedStorageFile:

  • GetUserStoreForApplication: Obtient l’espace de stockage isolé de l’utilisateur qui correspond à l'identité de l’application du code qui l’appelle.
  • FileExists: Détermine si le chemin spécifié se réfère à un fichier existant dans le stockage isolé
  • CreateFile: Créer un fichier dans le stockage isolé
  • OpenFile: Ouvre un fichier à un emplacement spécifié en utilisant le partage et les options d'accès définies. Cette méthode retourne un objet IsolatedStorageFileStream qui contient le flux du fichier.
  • DeleteFile: Supprime un fichier dans le stockage isolé.
  • DirectoryExists: Détermine si le chemin spécifié se réfère à un répertoire existant dans le stockage isolé
  • CreateDirectory: Crée un répertoire dans le stockage isolé.
  • DeleteDirectory: Supprime un répertoire dans le stockage isolé.
  • Remove: Supprime la portée de l’Isolated Storage et tout son contenu.

Les instances des classes IsolatedStorageFile et IsolatedStorageFileStream doivent être supprimées après leurs utilisations. La déclaration du « using » le fait automatiquement pour vous et est une bonne pratique à utiliser.

L'exemple suivant créé une application qui enregistre et récupère un fichier image dans l’isolated storage. Cet exemple utilise la classe PhotoChooserTask pour obtenir une image se situant dans la bibliothèque d’images sur l'appareil. Ce tutoriel n’ira pas dans les détails de l'utilisation du PhotoChooserTask. Pour plus d'informations sur l'utilisation de PhotoChooserTask, voir l’article MSDN sur l’aperçu des Launcher et Choosers pour Windows Phone.

Le XAML suivant montre une interface utilisateur de base pour une application. Un Button pour lancer le sélecteur de photo et enregistrer le fichier image, un Button pour récupérer le fichier à partir de l’isolated storage et l'afficher, et un objet Image pour afficher le fichier image.

XAML

Code Snippet

  1. <!--ContentPanel - place additional content here-->
  2.  <StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  3.      <Button Name="btnSaveFile"
  4.              Content="Save Image"
  5.              Height="100" Width="300"
  6.              Click="btnSaveFile_Click"/>
  7.      <Button Name="btnDisplayFile"
  8.              Content="Display Saved Image"
  9.              Height="100" Width="300"
  10.              Click="btnDisplayFile_Click"/>
  11.      <Image Name="userImage" Source="Sl_Nebula.jpg" />
  12.  </StackPanel>

L’image suivante montre l’application en exécution dans l’émulateur Windows Phone.

image

Le code suivant créé et démarre le PhotoChooserTask pour obtenir une image, puis l’enregistrer dans l’Isolated Storage. Après que l’image est été choisie, un répertoire nommé images est créé s'il n'existe pas. Un objet IsolatedStorageFileStream est créé pour stocker le fichier. La méthode SaveJpeg est utilisée pour sauvegarder les données de l’image dans l'objet IsolatedStorageFileStream.

C#

Code Snippet

  1. private void SaveToFile(BitmapImage image)
  2.         {
  3.             using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
  4.             {
  5.                 WriteableBitmap bmImage = new WriteableBitmap(image);
  6.                 if (!store.DirectoryExists("Images"))
  7.                 {
  8.                     store.CreateDirectory("Images");
  9.                 }
  10.                 using (IsolatedStorageFileStream isoStream =
  11.                 store.OpenFile(@"Images\userPhoto.jpg", FileMode.OpenOrCreate))
  12.                 {
  13.                     Extensions.SaveJpeg(
  14.                     bmImage,
  15.                     isoStream,
  16.                     bmImage.PixelWidth,
  17.                     bmImage.PixelHeight,
  18.                     0,
  19.                     100);
  20.                 }
  21.             }
  22.         }

Visual Basic

Code Snippet

  1. Private photoTask As PhotoChooserTask
  2. ' Constructor
  3. Public Sub New()
  4.     InitializeComponent()
  5.     photoTask = New PhotoChooserTask()
  6.     photoTask.Completed += New EventHandler(Of PhotoResult)(AddressOf photoTask_Completed)
  7. End Sub
  8. Private Sub photoTask_Completed(sender As Object, e As PhotoResult)
  9.     If e.TaskResult = TaskResult.OK Then
  10.         Dim bmp As New BitmapImage()
  11.         bmp.SetSource(e.ChosenPhoto)
  12.         SaveToFile(bmp)
  13.     End If
  14. End Sub
  15. Private Sub btnSaveFile_Click(sender As Object, e As RoutedEventArgs)
  16.     photoTask.Show()
  17. End Sub
  18. Private Sub SaveToFile(image As BitmapImage)
  19.     Using store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
  20.         Dim bmImage As New WriteableBitmap(image)
  21.         If Not store.DirectoryExists("Images") Then
  22.             store.CreateDirectory("Images")
  23.         End If
  24.         Using isoStream As IsolatedStorageFileStream = store.OpenFile("Images\userPhoto.jpg", FileMode.OpenOrCreate)
  25.             Extensions.SaveJpeg(bmImage, isoStream, bmImage.PixelWidth, bmImage.PixelHeight, 0, 100)
  26.         End Using
  27.     End Using
  28. End Sub

L’image suivante montre le sélecteur d’images sur le téléphone.

image

Le code suivant récupère le fichier image à partir de l’Isolated Storage en utilisant la méthode OpenFile, et définit la propriété Source d'un objet Image pour cette image.

C#

Code Snippet

  1. private BitmapImage GetSavedImage()
  2.         {
  3.             BitmapImage image;
  4.             using (IsolatedStorageFile store =
  5.             IsolatedStorageFile.GetUserStoreForApplication())
  6.             {
  7.                 using (IsolatedStorageFileStream isoStream =
  8.                 store.OpenFile(@"Images\userPhoto.jpg", FileMode.Open))
  9.                 {
  10.                     image = new BitmapImage();
  11.                     image.SetSource(isoStream);
  12.                 }
  13.             }
  14.             return image;
  15.             
  16.         }
  17.         
  18.         private void btnDisplayFile_Click(object sender, RoutedEventArgs e)
  19.         {
  20.             BitmapImage bitmap = GetSavedImage();
  21.             if (bitmap != null)
  22.             {
  23.                 // userImage is defined in MainPage.xaml
  24.                 userImage.Source = bitmap;
  25.             }
  26.         }

Visual Basic

Code Snippet

  1. Private Function GetSavedImage() As BitmapImage
  2.      Dim image As BitmapImage
  3.      Using store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()
  4.          Using isoStream As IsolatedStorageFileStream = store.OpenFile("Images\userPhoto.jpg", FileMode.Open)
  5.              image = New BitmapImage()
  6.              image.SetSource(isoStream)
  7.          End Using
  8.      End Using
  9.      Return image
  10.  End Function
  11.  Private Sub btnDisplayFile_Click(sender As Object, e As RoutedEventArgs)
  12.      Dim bitmap As BitmapImage = GetSavedImage()
  13.      If bitmap IsNot Nothing Then
  14.          ' userImage is defined in MainPage.xaml
  15.          userImage.Source = bitmap
  16.      End If
  17.  End Sub

L'image suivante montre l'application après que l'objet Image ai été mis à jour avec le fichier image récupéré de l’Isolated Storage.

image

Voir aussi