gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:21 28 4
gpt4 key购买 nike

是否可以将 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?

是的。

这基本上是 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”从那里?

关于android - 将 SharedPreferences 文件保存到自定义目录或获取默认 SharedPreferences 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8194883/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com