Gérer les préférences sous Android

Avec Android, nous avons 3 façons d’accéder aux préférences qui semblent équivalentes : Activity.getPreferences, ContextWrapper.getSharedPreferences, PreferenceManager.getDefaultSharedPreferences. Rappelons que cette notion de préférence correspond aux fichiers qui contiennent des paires clés-valeurs, couramment utilisés pour stocker la configuration utilisateur d’une application. On obtient une référence vers un objet SharedPreferences, sur lequel on appelle edit() pour obtenir une Editor, puis commit() ou apply() ou bien getXXX(K) pour obtenir la valeur qui correspond à la clé. Le nom du fichier est plus ou moins paramétrable par le développeur, c’est justement toute la différence entre ces différentes méthodes.

Activity.getPreferences

Cette méthode est un appel à getSharedPreferences(Activity.class.name, mode), soit un fichier de préférence qui porte le nom de l’activité. Les modes sont donc les mêmes que pour la méthode suivante.

SharedPreferences prefs = getPreferences(MODE_PRIVATE);

boolean encours = prefs.getBoolean(« estencours », true);

ContextWrapper.getSharedPreferences

Cette méthode getSharedPreferences(nom_du_fichier, mode) retourne une référence vers une SharedPreference qui correspond au nom de fichier nom_du_fichier, ouvert dans le mode mode.

Les modes utilisables sont MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE. Le fichier de préférences sera accessible à l’extérieur de l’application selon le mode utilisé.

SharedPreferences prefs = getSharedPreferences(« nom_du_fichier »,MODE_PRIVATE);

boolean encours = prefs.getBoolean(« estencours », true);

PreferenceManager.getDefaultSharedPreferences

Cette méthode retourne une référence SharedPreference qui sera la même pour toutes les activités de l’application. Le nom du fichier de préférence sera /data/data/<nom_du_package>/shared_prefs/<nom_du_package>_preferences.xml.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

boolean encours = prefs.getBoolean(« estencours », true);

Conclusion

Il semble plus simple et efficace d’utiliser PrefrenceManager.getDefaultSharedPreferences(…), cela assure d’utiliser le même fichier de préférences dans toute l’application. Imaginons que vous positionniez les valeurs de préférence dans une première activité (dédiée à cela, en général), et que vous les utilisiez dans une autre, il faut absolument que la lecture se fasse dans le fichier où les paramètres sont stockés. Ou alors, pour être sûr d’utiliser le même fichier de préférences dans toutes les activités de l’application, il faut utiliser le même nom…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *