是否可以将SharedPreferences文件保存到自定义目录中?让我们说到/data/data/package.name/my_prefs/
。将SharedPreferences文件保存到自定义目录中或获取默认SharedPreferences dir
或者有可能检索SharedPreferences默认保存为?
P.S.硬编码路径/data/data/package.name/shared_prefs/
不是解决方案。
是否可以将SharedPreferences文件保存到自定义目录中?让我们说到/data/data/package.name/my_prefs/
。将SharedPreferences文件保存到自定义目录中或获取默认SharedPreferences dir
或者有可能检索SharedPreferences默认保存为?
P.S.硬编码路径/data/data/package.name/shared_prefs/
不是解决方案。
或者是否有可能检索目录SharedPreferences是 默认保存为?
是的。
这基本上是dataDir/shared_prefs,你可以从ApplicationInfo对象(这反过来又可以从PackageManager获得)获得。 (另外,它可能是一样的“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。
我会说,如果你不希望依靠公约/数据/数据/ <程序包>/shared_prefs那么它应该是安全的获得“DATADIR”,靠“shared_prefs”从那里?
在某些固件上,'shared_prefs'可以保存在其他地方。请参阅:http://stackoverflow.com/questions/5531289/copy-the-shared-preferences-xml-file-from-data-on-samsung-device-failed – Enyby
还是有可能检索目录SharedPreferences是 默认保存为?
看到这个答案要知道如何安全地获取路径:https://stackoverflow.com/a/33849650/1504248
你可以试试这个:'文件DIR = GETDIR( “shared_prefs”);' – Dalmas
这只会创建目录'/数据/数据/ package.name/app_shared_prefs /' –