Android SharedPreferences con MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE
SharedPreferences
en Android son locales para una aplicación, y no compartidos entre diferentes aplicaciones. Cuando yo digo
SharedPreferences preferences = getSharedPreferences(PREF_NAME, MODE_WORLD_READABLE);
¿Qué significa que estas preferencias MODE_WORLD_READABLE
, MODE_WORLD_WRITABLE
o MODE_PRIVATE
?
getSharedPreferences(String name, int mode)
se explica aquí
MODE_PRIVATE: File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID). MODE_WORLD_READABLE: File creation mode: allow all other applications to have read access to the created file. MODE_WORLD_WRITEABLE : File creation mode: allow all other applications to have write access to the created file.
Más información aquí
Editar A partir de la API 17, el MODE_WORLD_READABLE
y el MODE_WORLD_WRITEABLE
están obsoletos:
Esta constante fue obsoleta en API nivel 17.
Crear archivos legibles en todo el mundo es muy peligroso y es probable que cause fallos de seguridad en las aplicaciones. Está fuertemente desalentado; En su lugar, las aplicaciones deberían utilizar un mecanismo más formal para interacciones comoContentProvider
,BroadcastReceiver
yService
. No hay garantías de que este modo de acceso permanezca en un archivo, como cuando pasa por una copia de seguridad y restauración.
Las preferencias compartidas también se guardan en el archivo del sistema de archivos. Y estos modos definen si otra aplicación tendría derecho a leer la preferencia del fragmento en el archivo o no.
MODE_PRIVATE
significa que sólo la aplicación que crea la preferencia compartida puede leer escribe la preferencia
MODE_WORLD_READABLE
significa que otra aplicación también puede leer estas preferencias usando la API de preferencia compartida, pero no puede wright en este archivo de preferencias
MODE_WORLD_WRITEABLE
significa que otra aplicación también puede leer y escribir en el archivo de preferencias utilizando la API de preferencia compartida
El siguiente enlace también tiene una buena explicación y ejemplo de código para explicar los MODOS:
http://thedevelopersinfo.com/2009/11/25/getting-sharedpreferences-from-other-application-in-android/
http://chrisrisner.com/Accessing-the-Shared-Preferences-of-a-Different-Application-in-Android
Las preferencias se almacenan en el sistema de archivos. El modo define quién tiene acceso a las preferencias de la aplicación.
En lenguaje sencillo:
-
MODE_PRIVATE
es el modo de funcionamiento de las preferencias. Es el modo predeterminado y significa que sólo se accederá al archivo creado por la aplicación que llama. - En
MODE_WORLD_READABLE
otra aplicación puede leer el archivo creado pero no puede modificarlo. - En caso de
MODE_WORLD_WRITEABLE
otras aplicaciones también tienen permisos de escritura para el archivo creado.
La forma recomendada es utilizar el modo predeterminado, sin especificar el nombre del archivo
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
MODE_PRIVATE significa el archivo creado por tu aplicación para almacenar datos de preferencias de aplicaciones que sólo pueden ser accesibles para tu propia aplicación.
Ninguna otra aplicación podría acceder a ese archivo.