包之间的SharedPreferences不起作用(在一个应用程序内)

时间:2013-06-25 11:39:14

标签: android sharedpreferences

我有一个包含两个包的应用。在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();
   }
}

3 个答案:

答案 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()中进行编辑。