Czy można odzyskać katalog SharedPreferences to domyślnie zapisany jako?
Tak.
Jest to w zasadzie dataDir/shared_prefs które można uzyskać z ApplicationInfo obiektu (który z kolei można uzyskać z PackageManager). (Również, to może być taka sama jak „getFilesDir” dir można uzyskać łatwo z kontekście sama? Nie wiem, nie sprawdzałem tego.)
Od źródła, począwszy 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");
}
i "mPackageInfo" jest przykładem LoadedApk:
public File getDataDirFile() {
return mDataDirFile;
}
mDataDirFile = mDataDir != null ? new File(mDataDir) : null;
mDataDir = aInfo.dataDir;
i T kapelusz przywraca nas do ApplicationInfo.
powiedziałbym, jeśli nie chcesz polegać na konwencji /data/data/<package_name>/shared_prefs to powinno być bezpieczne, aby uzyskać „datadir” i polegać na „shared_prefs” stamtąd ?
można spróbować to: 'pliku dir = getDir ("shared_prefs");' – Dalmas
Ten katalog będzie tworzyć tylko '/ dane/dane/package.name/app_shared_prefs/' –