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

前端之家收集整理的这篇文章主要介绍了android – 将SharedPreferences文件保存到自定义目录或获取默认的SharedPreferences目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以将SharedPreferences文件保存到自定义目录中?让我们说到/data/data/package.name/my_prefs/.

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

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

解决方法

Or is it possible to retrieve the directory SharedPreferences are
saved by default to?

是.

这基本上是您可以从ApplicationInfo对象获取dataDir / shared_prefs(反过来您可以从PackageManager获取). (另外,它可能与“getFilesDir”目录相同,你可以从Context本身轻松获得?不确定,没有检查.)

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

猜你在找的Android相关文章