2011-11-19 35 views
7

¿Es posible guardar los archivos SharedPreferences en un directorio personalizado? Digamos en /data/data/package.name/my_prefs/.Guarde los archivos de SharedPreferences en el directorio personalizado u obtenga el directorio predeterminado de SharedPreferences

¿O es posible recuperar el directorio donde las Preferencias Compartidas se guardan de manera predeterminada?

P.S. La codificación de la ruta /data/data/package.name/shared_prefs/ no es la solución.

+0

Usted puede intentar esto: 'dir Archivo = getDir ("shared_prefs");' – Dalmas

+0

Este directorio sólo creará '/ datos/datos/package.name/app_shared_prefs/' –

Respuesta

6

¿O es posible recuperar el directorio Preferencias Compartidas guardado de forma predeterminada en?

Sí.

Esta es básicamente la dataDir/shared_prefs que se puede obtener de la ApplicationInfo objeto (que a su vez se puede obtener de la PackageManager). (También, podría ser el mismo que el directorio "getFilesDir" se puede obtener fácilmente de Contexto sí? No estoy seguro, no comprobó que.)

Desde la fuente, a partir de Context.getSharedPreferences (ContextImpl source):

public SharedPreferences getSharedPreferences(String name, int mode) { 
     SharedPreferencesImpl sp; 
     File prefsFile; 
     boolean needInitialLoad = false; 
     synchronized (sSharedPrefs) { 
      sp = sSharedPrefs.get(name); 
      if (sp != null && !sp.hasFileChangedUnexpectedly()) { 
       return sp; 
      } 
      prefsFile = getSharedPrefsFile(name); 
... 

public File getSharedPrefsFile(String name) { 
     return makeFilename(getPreferencesDir(), name + ".xml"); 
    } 

private File getPreferencesDir() { 
     synchronized (mSync) { 
      if (mPreferencesDir == null) { 
       mPreferencesDir = new File(getDataDirFile(), "shared_prefs"); 
      } 
      return mPreferencesDir; 
     } 
    } 

private File getDataDirFile() { 
     if (mPackageInfo != null) { 
      return mPackageInfo.getDataDirFile(); 
     } 
     throw new RuntimeException("Not supported in system context"); 
    } 

Y "mPackageInfo" es una instancia de LoadedApk:

public File getDataDirFile() { 
     return mDataDirFile; 
    } 

mDataDirFile = mDataDir != null ? new File(mDataDir) : null; 

mDataDir = aInfo.dataDir; 

y T hat nos lleva de vuelta a ApplicationInfo.

Yo diría que si usted no quiere depender de la convención /datos/datos/<PACKAGE_NAME>/shared_prefs entonces debe ser seguro para obtener el "DataDir" y confía en "shared_prefs" a partir de ahí ?

+0

En algunos firmwares' shared_prefs' se puede guardar en otros lugares. Ver: http://stackoverflow.com/questions/5531289/copy-the-shared-preferences-xml-file-from-data-on-samsung-device-failed – Enyby

Cuestiones relacionadas