将SharedPreferences文件保存到自定义目录或获取默认的SharedPreferences目录

是否有可能将SharedPreferences文件保存到自定义目录? 我们来看看/data/data/package.name/my_prefs/

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

PS硬编码path/data/data/package.name/shared_prefs/不是解决scheme。

Solutions Collecting From Web of "将SharedPreferences文件保存到自定义目录或获取默认的SharedPreferences目录"

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

是。

这基本上就是您可以从ApplicationInfo对象获得的dataDir / shared_prefs(反过来,您可以从PackageManager中获取)。 (另外,它可能与上下文本身很容易获得的“getFilesDir”dir相同?不确定,没有检查。)

从源代码开始,使用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”应该是安全的?

或者有可能检索SharedPreferences默认保存到的目录?

看到这个答案知道如何以安全的方式获取path: https : //stackoverflow.com/a/33849650/1504248