美文网首页Android开发
Android SharedPreferences 自定义目录到

Android SharedPreferences 自定义目录到

作者: yunhen | 来源:发表于2018-03-26 08:36 被阅读0次
    /**
         * 用反射生成 SharedPreferences
         * @param context
         * @param dir
         * @param fileName 文件名,不需要 '.xml' 后缀
         * @return
         */
    private static SharedPreferences getMySharedPreferences(Context context,String dir,String fileName) {
            try {
                // 获取 ContextWrapper对象中的mBase变量。该变量保存了 ContextImpl 对象
                Field field_mBase = ContextWrapper.class.getDeclaredField("mBase");
                field_mBase.setAccessible(true);
                // 获取 mBase变量
                Object obj_mBase = field_mBase.get(context);
                // 获取 ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径
                Field field_mPreferencesDir = obj_mBase.getClass().getDeclaredField("mPreferencesDir");
                field_mPreferencesDir.setAccessible(true);
                // 创建自定义路径
    //            String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android";
                File file = new File(dir);
                // 修改mPreferencesDir变量的值
                field_mPreferencesDir.set(obj_mBase,file);
                // 返回修改路径以后的 SharedPreferences :%FILE_PATH%/%fileName%.xml
                Log.e(TAG,"getMySharedPreferences filep="+file.getAbsolutePath()+"| fileName="+fileName);
                return context.getSharedPreferences(fileName,Activity.MODE_PRIVATE);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            Log.e(TAG,"getMySharedPreferences end filename="+fileName);
            // 返回默认路径下的 SharedPreferences : /data/data/%package_name%/shared_prefs/%fileName%.xml
            return context.getSharedPreferences(fileName,Context.MODE_PRIVATE);
        }
    
    //通过putValue() 方法保存到系统原来的Sp 中
    
    SharedPreferences saveInfoNew = getMySharedPreferences(mContext,dir,fileName);
            for (Map.Entry<String, ?> entry : saveInfoNew.getAll().entrySet()) {
                putValue(entry.getKey(),entry.getValue());
            }
    
    

    相关文章

      网友评论

        本文标题:Android SharedPreferences 自定义目录到

        本文链接:https://www.haomeiwen.com/subject/unvgvqtx.html