0

2 つのパッケージを含むアプリがあります。パッケージ com.soul.app1.plugin には FireReceiver.class があります (これは Tasker プラグインの一部です)。値は問題なく保存されますが、正しく取得されるのは (2 番目のパッケージ - 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 に答える