我有一个包含两个包的应用。在com.soul.app1.plugin包中有一个FireReceiver.class(这是Tasker插件的一部分)。值存储得很好,但只有在我第一次运行它(重新安装后)时才能正确检索(在第二个包中 - Settings.class)。当我再次尝试检索它时,将检索旧值而不是新值。
com.soul.app1包中的Settings.java:
public class Settings extends Activity {
@Override
public void onResume() {
super.onResume();
SharedPreferences settings = getApplicationContext().getSharedPreferences("SETTINGS", 0);
int minVolSet = settings.getInt("value", 0);
}
}
com.soul.app1.plugin包中的FireReceiver.java:
public final class FireReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context, final Intent intent)
{
SharedPreferences.Editor editor;
SharedPreferences settings;
settings = context.getApplicationContext().getSharedPreferences("SETTINGS", 0);
editor = settings.edit();
editor.putInt("value", 2); // constant 2 is for testing purposes only
editor.apply();
}
}
答案 0 :(得分:1)
最后,我通过将getSharedPreferences()
切换为MODE_MULTI_PROCESS
http://developer.android.com/reference/android/content/Context.html#MODE_MULTI_PROCESS来解决问题。所以:
getSharedPreferences("SETTINGS", 0);
到
getSharedPreferences("SETTINGS", 4);
理解这一点的关键是每个包(甚至在同一个应用程序中)都有自己的进程。我找不到这些信息所以我必须自己学习:)。
答案 1 :(得分:0)
在这里,您需要在应用新值
后提交编辑器SharedPreferences.Editor editor;
SharedPreferences settings;
settings = context.getApplicationContext().getSharedPreferences("SETTINGS", 0);
editor = settings.edit();
editor.putInt("value", 2); // constant 2 is for testing purposes only
editor.commit()
答案 2 :(得分:-1)
需要在共享首选项editor.commit()
中进行编辑。