共有プリファレンスに設定を保存するDialogViewがあります。それはパッケージA
にあり、これらのプリファレンスを読むことができるはずのB
パッケージにある別のアクティビティがあります。コンテキストが変更されたときに共有プリファレンスを読み取る
私は、コンテキストと共有の設定名を取り、これらの設定を取得するラッパークラスを作成しました。初めて共有された設定が最初に設定されたときはすべてうまく動作しますが、私がそれを変更すると、初めて同じ結果が得られました。
問題1つのプロセスで優先度を保存し、別のプロセスで優先度を読み取る必要があるという問題があります。
だから、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;
コンテキストとは関係ありません。値を正しく設定していない可能性があります。 – ngesh
値を正しく設定していますか。 Commitはtrueを返します。そして、同じパッケージからこれらの設定を取得しようとすると、私は最新の値を得ました。質問に私のラッパークラスを見てください。ちょうどそれを付けました。 –
「パッケージ」とはどういう意味ですか? 2つの異なるアプリを意味しますか? –