是否可以将SharedPreferences文件保存到自定义目录中?让我们说到/data/data/package.name/my_prefs/.
或者是否可以检索目录SharedPreferences默认保存到?
附:硬编码路径/data/data/package.name/shared_prefs/不是解决方案.
解决方法
Or is it possible to retrieve the directory SharedPreferences are
saved by default to?
是.
这基本上是您可以从ApplicationInfo对象获取的dataDir / shared_prefs(反过来您可以从PackageManager获取). (另外,它可能与“getFilesDir”目录相同,你可以从Context本身轻松获得?不确定,没有检查.)
从源代码开始,以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"); }
而“mPackageInfo”是LoadedApk的一个实例:
public File getDataDirFile() { return mDataDirFile; } mDataDirFile = mDataDir != null ? new File(mDataDir) : null; mDataDir = aInfo.dataDir;
这将我们带回到ApplicationInfo.
我想说如果你不想依赖于convention / data / data /< package_name> / shared_prefs,那么获取“dataDir”并从那里依赖“shared_prefs”应该是安全的吗?