Vous êtes sur la page 1sur 26

LES PRÉFÉRENCES PARTAGÉES

Imene Sghaier

2017-2018
PLAN DU CHAPITRE
 Introduction
 Les préférences partagées

 Récupération des préférences

 Lecture des ressources partagées

 Ecriture dans les préférences partagées

 Activité de préférences

 Catégories de préférences

 Types de préférences

 Déclaration des préférences dans le fichier


manifest
 Activity d’édition de préférences

 Attributs des préférences 2

Imene Sghaier-Développement d’applications mobiles


INTRODUCTION
 La plupart de nos applications ont besoin de stocker
des données à un moment ou à un autre (couleur
préférée de l'utilisateur, configuration réseau ou
encore des fichiers téléchargés sur internet)
 Android nous fournit plusieurs méthodes pour
sauvegarder des informations.
 le système de fichiers du smartphone qui est vu comme
un ordinateur sous Linux.
les SharedPreferences : les préférences partagées
 les BDs relationnelles (traitement par SQL) :
c'est la technologie SQLite
 Ces emplacements sont considérés comme des
"zones internes".
3

Imene Sghaier-Développement d’applications mobiles


LES PREFERENCES PARTAGÉES

 Les préférences partagées permettent d'associer à un identifiant une


valeur. Le couple ainsi créé permet de retenir les différentes options
que l'utilisateur souhaiterait conserver ou l'état de l'interface
graphique. Ces valeurs pourront être partagées entre plusieurs
composants.
 Utile voire indispensable pour enregistrer les paramètres des
utilisateurs (settings).
 Le point de départ de la manipulation des préférences partagées est
la classe SharedPreferences.
 Elle possède des méthodes permettant d'enregistrer et récupérer des
paires de type clés-valeur pour les types de données primitifs, comme
les entiers ou les chaînes de caractères. La clés est le nom de la
donnée, toujours de classe String. Les valeurs sont toujours des
types primitifs (boolean, int, long, float, String, etc.).
 L'avantage réel étant bien sûr que ces données sont conservées
même si l'application est arrêtée ou tuée. Ces préférences sont de
plus accessibles depuis plusieurs composants au sein d'une même
application.
4

Imene Sghaier-Développement d’applications mobiles


LES PREFERENCES PARTAGÉES

Il existe 3 façons d'avoir accès aux SharedPreferences :


 la méthode statique
SharedPreferences
PreferenceManager.getDefaultSharedPreferences(Context cxt)
 Si nous désirons utiliser un fichier standard par activité, alors nous
pourrons utiliser la méthode SharedPreferences getPreferences(int mode)
 En revanche, si nous avons besoin de plusieurs fichiers que nous
identifierons par leur nom, alors utilisons
SharedPreferences getSharedPreferences (String name, int mode)
 name sera le nom du fichier.
 mode, peut prendre trois valeurs :
 Context.MODE_PRIVATE, pour que le fichier créé ne soit accessible

que par l'application qui l'a créé.


 Context.MODE_WORLD_READABLE, pour que le fichier créé

puisse être lu par n'importe quelle application.


 Context.MODE_WORLD_WRITEABLE, pour que le fichier créé
puisse être lu et modifié par n'importe quelle application.
5

Imene Sghaier-Développement d’applications mobiles


RÉCUPÉRATION DES PRÉFÉRENCES
 Exemple : Avec une constante comme :
private static final String NOM_PREFS = "MesPrefs";
 on récupère les SharedPreferences de l'application associées à cette
constante par :

SharedPreferences mesPrefs = getSharedPreferences(NOM_PREFS,


Context.MODE_PRIVATE);
int leCompteur = mesPrefs.getInt("compteur", 0);

 getSharedPreferences (String name, int mode) est une


méthode qui retourne toujours le même objet qui modélise le
"panier" de préférences partagées avec
 name est le nom du fichier (du "panier") de SharedPreferences.
 mode indique la portée de ses préférences.

Imene Sghaier-Développement d’applications mobiles


RÉCUPÉRATION DES PRÉFÉRENCES

 Le fichier de préférences (repéré par NOM_PREFS)


est un fichier XML rangé dans
/data/data/NOM_PACKAGE_APPLI/shared_prefs/NO
M_PREFS.xml
 Le mode MODE_PRIVATE restreint l'accès au
fichier créé à l'application.
 Les modes d'accès MODE_WORLD_READABLE
permet aux autres applications de lire ce fichier
 Les modes d'accès MODE_WORLD_WRITABLE
permet aux autres applications de écrire dans ce
fichier.

Imene Sghaier-Développement d’applications mobiles


LECTURE DES PRÉFÉRENCES PARTAGÉES

 De manière naturelle, pour récupérer une valeur, on peut utiliser


la méthode
X getX(String key, X defValue) avec
X le type de l'objet désiré, key l'identifiant de votre valeur. X peut
valoir boolean, int, long, float, String ,...
 defValue une valeur que vous souhaitez voir retournée au cas où

il n'y ait pas de valeur associée à key.


 Exemple :

SharedPreferences mesPrefs = getSharedPreferences(NOM_PREFS,


Context.MODE_PRIVATE);
int leCompteur = mesPrefs.getInt("compteur", 0);

Imene Sghaier-Développement d’applications mobiles


LECTURE DES RESSOURCES PARTAGÉES
 String col = preferences.getString(FAVORITE_COLOR,
"FFFFFF");
 Pour supprimer une préférence
SharedPreferences.Editor removeString(String
key);
 Pour supprimer toutes les préférences, il existe
SharedPreferences.Editor clear().
 Pour récupérer toutes les données contenues dans les
préférences, il faut utiliser la méthode
Map<String, ?> getAll()

Imene Sghaier-Développement d’applications mobiles


ECRITURE DANS LES PRÉFÉRENCES PARTAGÉES

 Afin d'ajouter ou de modifier des couples dans


un SharedPreferences, il faut utiliser un objet de
type SharedPreference.Editor.
 Il est possible de récupérer cet objet en utilisant la
méthode SharedPreferences.Editor edit() sur
un SharedPreferences.
 Si vous souhaitez ajouter des informations, utilisez une
méthode du genre SharedPreferences.Editor putX(String
key, X value) avec X le type de l'objet, key l'identifiant
et value la valeur associée.
 Il vous faut ensuite impérativement valider vos
changements avec la méthode boolean commit().
 Les préférences partagées ne fonctionnent qu'avec les
objets de type boolean, float, int, long et String.
10

Imene Sghaier-Développement d’applications mobiles


ECRITURE DANS LES PRÉFÉRENCES PARTAGÉES
 Par exemple, pour conserver la couleur préférée de l'utilisateur,
il n'est pas possible d'utiliser la classe Color puisque seuls les
types de base sont acceptés, alors on pourrait conserver la valeur
de la couleur sous la forme d'une chaîne de caractères :

public final static String FAVORITE_COLOR = "fav color";



SharedPreferences preferences =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString(FAVORITE_COLOR, "FFABB4");
editor.commit();

11

Imene Sghaier-Développement d’applications mobiles


ECRITURE DANS LES PRÉFÉRENCES PARTAGÉES

 Pour écrire dans les préférences partagées il faut


passer par un éditeur associé à la SharedPreferences
:

Editor unEditeurDesSharedPrefs = mesPrefs.edit();


int leCompteur = ...;
unEditeurDesSharedPrefs.putInt("compteur", leCompteur);
unEditeurDesSharedPrefs.commit();

 Il ne faut pas oublier de faire commit() pour


réellement enregistrer les changements.
 On peut éteindre un smartphone et le rallumer, le
smartphone a gardé les valeurs puisqu'il les a écrit
12
dans son système de fichiers.
Imene Sghaier-Développement d’applications mobiles
ACTIVITÉ DE PRÉFÉRENCES

 Une activité spécifique doit être programmée pour


réaliser un écran d'édition de préférences. Elle hérite
de PreferenceActivity.
 A partir d'une description XML des préférences, la
classe permet d'afficher un écran composé de
modificateurs pour chaque type de préférences
déclarées.

13

Imene Sghaier-Développement d’applications mobiles


ACTIVITÉ DE PRÉFÉRENCES

 Voici un exemple de déclarations de préférences XML, à


stocker dans res/xml/preferences.xml:

<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:key="first_preferencescreen">
<CheckBoxPreference
android:key="wifi enabled"
android:title="WiFi" />
<PreferenceScreen
android:key="second_preferencescreen"
android:title="WiFi settings">
<CheckBoxPreference
android:key="prefer wifi"
android:title="Prefer WiFi" />
... other preferences here ...

</PreferenceScreen>
</PreferenceScreen> 14

Imene Sghaier-Développement d’applications mobiles


CATÉGORIES DE PRÉFÉRENCES
 Il est possible de désigner des catégories de préférences.
 Une pour les préférences destinées à internet par exemple,
une autre pour les préférences esthétiques, etc.
 On peut ajouter des préférences avec le
nœud PreferenceCategory
 Ce nœud est un layout, il peut donc contenir d'autre vues. Il ne peut
prendre qu'un seul attribut, android:title, pour préciser le texte
qu'il affichera.

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


<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="Réseau">

</PreferenceCategory>
<PreferenceCategory android:title="Luminosité">

</PreferenceCategory>
<PreferenceCategory android:title="Couleurs">

</PreferenceCategory>
</PreferenceScreen>
15

Imene Sghaier-Développement d’applications mobiles


TYPES DE PRÉFÉRENCES: CHECKBOXPREFERENCE

 Il s’agit d’une case à cocher avec CheckBoxPreference,


avec true ou false comme valeur (soit la case est cochée, soit elle
ne l'est pas).
 À la place du résumé standard (summary), vous pouvez
déclarer un résumé qui ne s'affiche que quand la case est
cochée, android:summaryOn, ou uniquement quand la case
est décochée, android:summaryOff.

<CheckBoxPreference
android:key="checkBoxPref"
android:title="Titre"
android:summaryOn="Résumé quand sélectionné"
android:summaryOff="Résumé quand pas sélectionné"
android:defaultValue="true"/>

16

Imene Sghaier-Développement d’applications mobiles


TYPES DE PRÉFÉRENCES: EDITTEXTPREFERENCE
 Permet à l'utilisateur d'insérer du texte
 EditTextPreference ouvre une boîte de dialogue contenant
un EditText permettant à l'utilisateur d'insérer du texte.
 android:dialogTitle permet de définir le texte de la boîte de
dialogue
 android:negativeButtonText et android:positiveButtonText p
ermettent respectivement de définir le texte du bouton à
droite et celui du bouton à gauche

<EditTextPreference
android:key="editTextPref"
android:dialogTitle="Titre de la boîte"
android:positiveButtonText="Je valide !"
android:negativeButtonText="Je valide pas !"
android:title="Titre"
android:summary="Résumé"
android:dependency="checkBoxPref" />
e dans la boîte de dialogue.

17

Imene Sghaier-Développement d’applications mobiles


TYPES DE PRÉFÉRENCES: EDITTEXTPREFERENCE

 Ce paramètre est lié à


la CheckBoxPreference précédente par
l'attribut android:dependency="checkBoxPref", ce qui
fait qu'il ne sera accessible que si la case à cocher
de checkBoxPref est activée, comme à la figure
suivante.

18

Imene Sghaier-Développement d’applications mobiles


TYPES DE PRÉFÉRENCES: LISTPREFERENCE

 Ce type de préférences est un choix dans une liste d'options.


 Dans cette préférence, on différencie ce qui est affiché de ce
qui est réel.
 Pratique pour traduire son application en plusieurs langues
 Il est possible d'utiliser les attributs
 android:dialogTitle,
 android:negativeButtonText et
 android:positiveButtonText.
 Les données de la liste que lira l'utilisateur sont à présenter
dans l'attribut android:entries, alors que les données qui
seront enregistrées sont à indiquer dans
l'attribut android:entryValues.
 La manière la plus facile de remplir ces attributs se fait à
19
l'aide d'une ressource de type array.
Imene Sghaier-Développement d’applications mobiles
TYPES DE PRÉFÉRENCES: LISTPREFERENCE

 Exemple on ajoute dans les ressources un tableau


des couleurs
<resources>
<array name="liste_couleurs_fr">
<item>Bleu</item>
<item>Rouge</item>
<item>Vert</item>
</array>
<array name="liste_couleurs">
<item>blue</item>
<item>red</item>
<item>green</item>
</array>
</resources>
20

Imene Sghaier-Développement d’applications mobiles


TYPES DE PRÉFÉRENCES: LISTPREFERENCE

 Le tableau ajouté sera ensuite fourni aux attributs


susnommés :

<ListPreference
android:key="listPref"
android:dialogTitle="Choisissez une couleur"
android:entries="@array/liste_couleurs_fr"
android:entryValues="@array/liste_couleurs"
android:title="Choisir couleur" />

On a sélectionné « Vert », ce qui signifie


que la valeur enregistrée sera green
21

Imene Sghaier-Développement d’applications mobiles


DÉCLARATION DES PRÉFÉRENCES DANS LE FICHIER MANIFEST

 Pour recevoir cette nouvelle interface graphique, nous avons


besoin d'une activité. Il nous faut donc la déclarer dans le
Manifest si on veut pouvoir y accéder avec les intents. Cette
activité sera déclarée comme n'importe quelle activité :

<activity
android:name=".PreferenceActivityExample"
android:label="@string/title_activity_preference_activity_ex
ample" >
</activity>

22

Imene Sghaier-Développement d’applications mobiles


ACTIVITY D’ÉDITION DE PRÉFÉRENCES

 Pour afficher l'écran d'édition des préférences


correspondant à sa description XML, il faut créer une
nouvelle activité qui hérite de PreferenceActivity et
simplement appeler la méthode
addPreferencesFromResource en donnant l'id de la
description XML:

public class MyPrefs extends PreferenceActivity {


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}}

 Pour lancer cette activité, on crée un bouton et un Intent


23
correspondant.
Imene Sghaier-Développement d’applications mobiles
ATTRIBUTS DES PRÉFÉRENCES
 Les attributs suivants sont utiles:
 android:title: La string apparaissant comme nom de la
préférence
 android:summary: Une phrase permettant d'expliciter la
préférence
 android:key: La clef pour l'enregistrement de la préférence.
C'est un attribut indispensable, ne l'oubliez jamais.
 android:defaultValue est la valeur par défaut de cette préférence.
 Utilisez android:dependency, si vous voulez lier votre préférence
à une autre activité. Il faut y insérer l'identifiant android:key de
la préférence dont on dépend.
 Pour accéder aux valeurs des préférences, on utiliser la méthode
getDefaultSharedPreferences sur la classe
PreferenceManager.
 C'est la clef spécifiée par l'attribut android:key qui est utilisée pour
récupérer la valeur choisie par l'utilisateur.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(


getApplicationContext());
String login = prefs.getString("login",""); 24

Imene Sghaier-Développement d’applications mobiles


ATTRIBUTS DES PRÉFÉRENCES
 Pour accéder aux valeurs des préférences, on utiliser la méthode
getDefaultSharedPreferences sur la classe
PreferenceManager.
 C'est la clef spécifiée par l'attribut android:key qui est utilisée pour
récupérer la valeur choisie par l'utilisateur.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(


getApplicationContext());
String login = prefs.getString("login","");

25

Imene Sghaier-Développement d’applications mobiles


RÉFÉRENCES

 https://openclassrooms.com/courses/creez-des-
applications-pour-android/le-stockage-de-
donnees-2

26

Vous aimerez peut-être aussi