在更改上下文时读取共享首选项

时间:2012-04-11 12:36:16

标签: android sharedpreferences

我有一个DialogView,它存储共享首选项中的设置。它位于包A中,我有另一个活动,位于包B,应该能够读取这些首选项。

所以我创建了一个包装类,它接受上下文和共享首选项名称并检索这些设置。当第一次设置共享首选项时,一切都很好,但是当我更改它时,我得到了相同的结果,这是第一次设置的。

问题是我在一个进程中保存首选项,并且需要能够在另一个进程中读取它们。

所以似乎Context已经改变了,我无法回溯新的背景。我该怎么做才能获得最新的共享偏好?

先谢谢你。

请查看我的包装类

public class PhotoAppWidgetSettingsProxy extends Proxy {

    private final static String PREFERENCES_NAME = PhotoAppWidgetSettingsProxy.class.getName();
    private final static int PREFERENCES_MODE = Context.MODE_PRIVATE;

    private Context mCtx = null;
    private SharedPreferences pref = null;
    private SharedPreferences.Editor editor = null;


    public PhotoAppWidgetSettingsProxy(String name, Context context) {
        super(name, context);       
        mCtx = context;
        pref = context.getSharedPreferences(PREFERENCES_NAME, PREFERENCES_MODE);
        editor = pref.edit();
    }


    private final static String FRAME = "FRAME";

    /**
     * Sets selected frame mode 
     * @param frame id
     */
    public void setFrameMode(int frameId){
        editor.putInt(FRAME, frameId);

        Log.d(PREFERENCES_NAME, "SET MODE="+frameId);
        boolean success = editor.commit();
        Log.d(PREFERENCES_NAME, "SET MODE="+success);
    }
    /**
     * Gets selected frame mode 
     * @return frame id
     */
    public int getFrameMode(){
        Log.d(PREFERENCES_NAME, "GET MODE="+pref.getInt(FRAME, 0));
        return pref.getInt(FRAME, 0);
    }

解决:

private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;

2 个答案:

答案 0 :(得分:3)

private final static int PREFERENCES_MODE = Context.MODE_MULTI_PROCESS;

答案 1 :(得分:2)

访问共享首选项/值时,我发现编写一个扩展Application的CustomApplication类很有用。我可以在其中放置任何必要的字段/方法,并使用以下方法从任何其他Android类中轻松获取它们:

CustomApplication app = (CustomApplication) getApplication(); 
int x = app.getX(); 

这对你有帮助吗?