2011-11-19 9 views
7

È possibile salvare i file SharedPreferences nella directory personalizzata? Diciamo in /data/data/package.name/my_prefs/.Salvare i file SharedPreferences nella directory personalizzata o ottenere la directory SharedPreferences predefinita

Oppure è possibile recuperare la directory SharedPreferences vengono salvate per impostazione predefinita su?

P.S. Hardcoding il percorso /data/data/package.name/shared_prefs/ non è la soluzione.

+0

si può provare questo: 'File dir = GETDIR ("shared_prefs");' – Dalmas

+0

Questa directory creerà solo '/ dati/dati/package.name/app_shared_prefs/' –

risposta

6

Oppure è possibile recuperare la directory SharedPreferences sono salvate per impostazione predefinita su?

Sì.

Questo è fondamentalmente il dataDir/shared_prefs che si possono ottenere dal ApplicationInfo oggetto (che a sua volta si può ottenere dal PackageManager). (Inoltre, potrebbe essere lo stesso del "getFilesDir" dir si può ottenere facilmente da Contesto stessa? Non sono sicuro, non controllare che.)

Dalla sorgente, a partire da 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"); 
    } 

E "mPackageInfo" è un'istanza di LoadedApk:

public File getDataDirFile() { 
     return mDataDirFile; 
    } 

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

mDataDir = aInfo.dataDir; 

e T cappello ci riporta a ApplicationInfo.

Direi che se non si vuole fare affidamento sulla convenzione /dati/dati/<PACKAGE_NAME>/shared_prefs allora dovrebbe essere sicuro di ottenere il "DATADIR" e si basano su "shared_prefs" da lì ?

+0

Su alcuni firmware' shared_prefs' può essere salvato in altri posti. Vedi: http://stackoverflow.com/questions/5531289/copy-the-shared-preferences-xml-file-from-data-on-samsung-device-failed – Enyby