Preferencias compartidas de Android con MODE_PRIVATE,MODE_WORLD_READABLE,MODE_WORLD_WRITABLE

3 minutos de lectura

avatar de usuario de user1730789
usuario1730789

SharedPreferences en Android son locales para una aplicación y no se comparten entre diferentes aplicaciones. Cuando yo digo

SharedPreferences preferences = getSharedPreferences(PREF_NAME, MODE_WORLD_READABLE);

¿Qué significa hacer estas preferencias? MODE_WORLD_READABLE, MODE_WORLD_WRITABLE o
MODE_PRIVATE?

Avatar de usuario de Adrian C.
Adrián C.

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 API 17, el MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE están en desuso:

Esta constante quedó obsoleta en el nivel de API 17.
La creación de archivos de lectura mundial es muy peligrosa y es probable que provoque agujeros de seguridad en las aplicaciones. Se desaconseja encarecidamente; en cambio, las aplicaciones deben usar un mecanismo más formal para las interacciones, como ContentProvider, BroadcastReceivery Service. No hay garantías de que este modo de acceso permanecerá en un archivo, como cuando pasa por una copia de seguridad y restauración.

Avatar de usuario de Anup Cowkur
Anup Cowkur

Las preferencias se almacenan en el sistema de archivos. El modo define quién tiene acceso a las preferencias de su aplicación.

En lenguaje sencillo:

  • MODE_PRIVATE es el modo de funcionamiento de las preferencias. Es el modo predeterminado y significa que solo la aplicación que llama accederá al archivo creado.
  • 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 usar el modo predeterminado, sin especificar el nombre del archivo.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Avatar de usuario de Praful Bhatnagar
Praful Bhatnagar

Las preferencias compartidas también se guardan en un archivo en el sistema de archivos. Y estos modos definen si otra aplicación tendría derecho a leer la preferencia de fragmento en el archivo o no.

MODE_PRIVATE significa que solo la aplicación que crea la preferencia compartida puede leer y escribir la preferencia

MODE_WORLD_READABLE significa que otra aplicación también puede leer estas preferencias usando la API de preferencias compartidas pero no puede escribir el valor en este archivo de preferencias

MODE_WORLD_WRITEABLE significa que otra aplicación también puede leer y escribir en el archivo de preferencias usando la API de preferencias compartidas

El siguiente enlace también tiene una buena explicación y un 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

MODE_PRIVATE significa el archivo que creó su aplicación para almacenar datos de preferencias de la aplicación a los que solo puede acceder su propia aplicación.

Ninguna otra aplicación podría acceder a ese archivo.

¿Ha sido útil esta solución?