我创建一个名为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));
}
}
答案 0 :(得分:3)
这是由于删除它后,manifeststs.xml中的 android:process =“:remote”。我得到了正确的布尔值。
答案 1 :(得分:0)
替换 -
editorALARM.putBoolean("alarm", true).apply();
与 -
editorALARM.putBoolean("alarm", true).commit();
将为您效劳