Или есть возможность получить каталог SharedPreferences
по умолчанию сохраняется в?
Да.
Это в основном dataDir / shared_prefs, который вы можете получить из объекта ApplicationInfo (который, в свою очередь, вы можете получить из PackageManager ). (Кроме того, это может быть то же самое, что и каталог «getFilesDir», который можно легко получить из самого Context ? Не уверен, не проверял это.)
Из источника, начиная с Context.getSharedPreferences ( Источник ContextImpl ):
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 / <имя_пакета> / shared_prefs , тогда будет безопасно получить dataDir и полагаться на shared_prefs. " оттуда?