0

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

3 回答 3

1

最后,我通过切换getSharedPreferences()MODE_MULTI_PROCESS http://developer.android.com/reference/android/content/Context.html#MODE_MULTI_PROCESS解决了这个问题。所以:

getSharedPreferences("SETTINGS", 0);

getSharedPreferences("SETTINGS", 4);

理解这一点的关键是每个包(即使在同一个应用程序中)都有自己的进程。我找不到这些信息,所以我不得不自己学习:)。

于 2013-06-26T13:47:27.770 回答
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()
于 2013-06-25T11:46:36.583 回答
-1

在共享首选项中进行编辑editor.commit()是必需的。

于 2013-06-25T11:59:34.227 回答