Android BroadcastReceiver 中的 SharedPreferences 值未更新
Android SharedPreferences value not update in BroadcastReceiver
我创建了一个名为 ALARM 的 SharedPreferences,其中包含一个名为 ("alarm",boolean) 的映射,("alarm",boolean) 的布尔值在 MainActivity 中不时更改,并在 BroadcastReceiver 中接收.
问题是:当我不时更改MainActivity 中的值时,BroadcastReceiver 只更改一次。我的代码有什么问题?
在下面的代码中,start() 对齐到一个按钮,单击时,将 boolean 更改为 true。我也可以在 BroadcastReceiver 中看到一个真实的值。但是后来我点击了 stop(),在 MainActivity 中将布尔值更改为 false,但仍然看到在 BroadcastReceiver 中收到了一个真值。
如果我先点击 stop(),那么我总是在 BroadcastReceiver 中看到 false 值。(即使我多次点击 start())
谢谢。
主要活动:
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));
}
}
替换-
editorALARM.putBoolean("alarm", true).apply();
与-
editorALARM.putBoolean("alarm", true).commit();
会为你工作
这是由于 android: process =":remote" in manifests.xml,删除后。我得到了正确的布尔值。
我创建了一个名为 ALARM 的 SharedPreferences,其中包含一个名为 ("alarm",boolean) 的映射,("alarm",boolean) 的布尔值在 MainActivity 中不时更改,并在 BroadcastReceiver 中接收.
问题是:当我不时更改MainActivity 中的值时,BroadcastReceiver 只更改一次。我的代码有什么问题?
在下面的代码中,start() 对齐到一个按钮,单击时,将 boolean 更改为 true。我也可以在 BroadcastReceiver 中看到一个真实的值。但是后来我点击了 stop(),在 MainActivity 中将布尔值更改为 false,但仍然看到在 BroadcastReceiver 中收到了一个真值。
如果我先点击 stop(),那么我总是在 BroadcastReceiver 中看到 false 值。(即使我多次点击 start())
谢谢。
主要活动:
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));
}
}
替换-
editorALARM.putBoolean("alarm", true).apply();
与-
editorALARM.putBoolean("alarm", true).commit();
会为你工作
这是由于 android: process =":remote" in manifests.xml,删除后。我得到了正确的布尔值。