Android SharedPreferences值未在BroadcastReceiver中更新

时间:2016-08-26 13:31:17

标签: android sharedpreferences android-broadcastreceiver

我创建一个名为ALARM的SharedPreferences,其中一个名为(“alarm”,boolean)的地图,(“alarm”,boolean)的布尔值在MainActivity中不时更改,并在BroadcastReceiver中接收。

问题是:当我在MainActivity中更改时间值时,BroadcastReceiver只会更改一次。我的代码出了什么问题?

在下面的代码中,start()与按钮对齐,单击时,将boolean更改为true。我也可以看到BroadcastReceiver收到的真值。但是我在MainActivity中单击stop(),boolean更改为false,但仍然看到BroadcastReceiver中收到的真值。

如果我先点击stop(),那么我总是在BroadcastReceiver中看到false值。(即使我多次点击start())

感谢。

MainActivity:

public class MainActivity extends AppCompatActivity {
SharedPreferences ALARM;
SharedPreferences.Editor editorALARM;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ALARM = getSharedPreferences("ALARM", MODE_PRIVATE);
    editorALARM = ALARM.edit();

}

// start data service
public void start(View view) {
    editorALARM.putBoolean("alarm", true).apply();
    Log.e("start",""+ALARM.getBoolean("alarm", false));

    Intent intent = new Intent();
    intent.setAction("xxx.ALARM");
    sendBroadcast(intent);

}

// stop data service
public void stop(View view) {
    editorALARM.putBoolean("alarm", false).apply();
    Log.e("stop",""+ALARM.getBoolean("alarm", true));

    Intent intent = new Intent();
    intent.setAction("xxx.ALARM");
    sendBroadcast(intent);

}

}

广播接收器:

public class Receiver extends BroadcastReceiver {
SharedPreferences ALARM;

@Override
public void onReceive(Context context, Intent intent) {
    ALARM = context.getSharedPreferences("ALARM", Activity.MODE_PRIVATE);

    Log.e("actual",""+ALARM.getBoolean("alarm", false));

}
}

2 个答案:

答案 0 :(得分:3)

这是由于删除它后,manifeststs.xml中的 android:process =“:remote”。我得到了正确的布尔值。

答案 1 :(得分:0)

替换 -

editorALARM.putBoolean("alarm", true).apply();

与 -

editorALARM.putBoolean("alarm", true).commit();

将为您效劳