是否可以将 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?
是的。
这基本上是 dataDir/shared_prefs,您可以从 ApplicationInfo 对象(反过来您可以从 PackageManager 获得)。 (此外,它可能与您可以从 Context 本身轻松获取的“getFilesDir”目录相同?不确定,没有检查。)
从源代码开始,从 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。
我想说的是,如果您不想依赖约定 /data/data/
关于android - 将 SharedPreferences 文件保存到自定义目录或获取默认 SharedPreferences 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194883/