保存共享preferences文件到自定义目录或获得默认共享preferences目录 [英] Save SharedPreferences files into custom dir or get default SharedPreferences dir

查看:164
本文介绍了保存共享preferences文件到自定义目录或获得默认共享preferences目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

时可以节省共享preferences文件到自定义目录?比方说,为 /data/data/package.name/my_$p$pfs /

或者是有可能获取共享preferences默认保存到?目录

P.S。硬编码路径 /data/data/package.name/shared_$p$pfs / 是解决不了问题。

解决方案
  

或者是有可能检索目录的共享preferences是   默认保存?

是的。

这是基本的<一个href="http://developer.android.com/reference/android/content/pm/ApplicationInfo.html#dataDir">dataDir / shared_ preFS,你可以从 ApplicationInfo 的对象获取(这反过来又可以从获得的 PackageManager 的)。 (另外,它可能是一样的getFilesDir目录,你可以从上下文的本身呢?不知道,也没检查。轻松搞定)

从源头上,从 Context.getShared preferences 的(<一href="http://$c$csearch.google.com/$c$csearch#uX1GffpyOZk/core/java/android/app/ContextImpl.java">ContextImpl来源):

 公开共享preferences getShared preferences(字符串名称,诠释模式){
        共享preferencesImpl SP;
        文件prefsFile;
        布尔needInitialLoad = FALSE;
        同步(sShared preFS){
            SP = sShared prefs.get(名称);
            如果(SP = NULL和放大器;!&安培;!sp.hasFileChangedUnexpectedly()){
                返回SP;
            }
            prefsFile = getShared prefsFile(名称);
...

公共文件getShared prefsFile(字符串名称){
        返回makeFilename(GET preferencesDir()名+的.xml);
    }

私人文件get preferencesDir(){
        同步(则msync){
            如果(M preferencesDir == NULL){
                米preferencesDir =新的文件(getDataDirFile(),shared_ preFS);
            }
            返回米preferencesDir;
        }
    }

私人文件getDataDirFile(){
        如果(mPackageInfo!= NULL){
            返回mPackageInfo.getDataDirFile();
        }
        抛出新的RuntimeException(不支持在系统环境中);
    }
 

和mPackageInfo是一个实例的 LoadedApk 的:

 公开文件getDataDirFile(){
        返回mDataDirFile;
    }

mDataDirFile = mDataDir!= NULL?新的文件(mDataDir):空;

 mDataDir = aInfo.dataDir;
 

这把我们带回的 ApplicationInfo 的。

我会说,如果你不希望依赖于约定* /数据/数据​​/&LT;程序包&GT; / shared_ preFS *,那么它应该是安全的获得DATADIR,靠从那里shared_ preFS?

Is it possible to save SharedPreferences files into custom dir? Let's say into /data/data/package.name/my_prefs/.

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

P.S. Hardcoding the path /data/data/package.name/shared_prefs/ is not the solution.

解决方案

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

Yes.

This is basically the dataDir /shared_prefs which you can get from the ApplicationInfo object (which in turn you can get from the PackageManager). (Also, it might be the same as the "getFilesDir" dir you can get easily from Context itself? Not sure, didn't check that.)

From the source, starting with 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");
    }

And "mPackageInfo" is an instance of LoadedApk:

public File getDataDirFile() {
        return mDataDirFile;
    }

mDataDirFile = mDataDir != null ? new File(mDataDir) : null;

 mDataDir = aInfo.dataDir;

And that brings us back to ApplicationInfo.

I'd say if you don't want to rely on the convention */data/data/<package_name>/shared_prefs* then it should be safe to get the "dataDir" and rely on "shared_prefs" from there?

这篇关于保存共享preferences文件到自定义目录或获得默认共享preferences目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆