【问题标题】:Save SharedPreferences files into custom dir or get default SharedPreferences dir将 SharedPreferences 文件保存到自定义目录或获取默认 SharedPreferences 目录
【发布时间】:2011-11-19 15:05:49
【问题描述】:

是否可以将 SharedPreferences 文件保存到自定义目录中?让我们说成/data/data/package.name/my_prefs/

或者是否可以检索默认保存 SharedPreferences 的目录?

附:硬编码路径 /data/data/package.name/shared_prefs/ 不是解决方案。

【问题讨论】:

  • 你可以试试这个:File dir = getDir("shared_prefs");
  • 这只会创建目录/data/data/package.name/app_shared_prefs/

标签: android sharedpreferences


【解决方案1】:

或者是否可以检索 SharedPreferences 所在的目录 默认保存到?

是的。

这基本上是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//shared_prefs,那么获取“dataDir”并依赖“ shared_prefs”从那里?

【讨论】:

【解决方案2】:

或者是否可以检索 SharedPreferences 所在的目录 默认保存到?

查看此答案以了解如何以安全的方式获取路径:https://stackoverflow.com/a/33849650/1504248

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2011-10-26
    相关资源
    最近更新 更多