2011-11-19 102 views
7

是否可以将SharedPreferences文件保存到自定义目录中?让我们说到/data/data/package.name/my_prefs/将SharedPreferences文件保存到自定义目录中或获取默认SharedPreferences dir

或者有可能检索SharedPreferences默认保存为?

P.S.硬编码路径/data/data/package.name/shared_prefs/不是解决方案。

+0

你可以试试这个:'文件DIR = GETDIR( “shared_prefs”);' – Dalmas

+0

这只会创建目录'/数据/数据/ package.name/app_shared_prefs /' –

回答

6

或者是否有可能检索目录SharedPreferences是 默认保存为?

是的。

这基本上是dataDir/shared_prefs,你可以从ApplicationInfo对象(这反过来又可以从PackageManager获得)获得。 (另外,它可能是一样的“getFilesDir”目录,你可以从语境自己轻松搞定?不知道,没有检查。)

从源头上,从Context.getSharedPreferencesContextImpl 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"); 
    } 

而 “mPackageInfo” 是实例LoadedApk

public File getDataDirFile() { 
     return mDataDirFile; 
    } 

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

mDataDir = aInfo.dataDir; 

而且吨帽子把我们带回ApplicationInfo

我会说,如果你不希望依靠公约/数据/数据/ <程序包>/shared_prefs那么它应该是安全的获得“DATADIR”,靠“shared_prefs”从那里?

+0

在某些固件上,'shared_prefs'可以保存在其他地方。请参阅:http://stackoverflow.com/questions/5531289/copy-the-shared-preferences-xml-file-from-data-on-samsung-device-failed – Enyby

相关问题