【发布时间】:2012-04-23 08:20:11
【问题描述】:
我有一个更新 SharedPreferences 中的字符串的活动。
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", username);
editor.commit();
然后我启动一个服务:
startService(new Intent(this, MyService.class));
该服务创建一个对扩展 BroadcastReceiver 的 Alarm 的引用:
Alarm alarm = null;
public void onCreate() {
alarm = new Alarm();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
alarm.SetAlarm(this);
}
在 SetAlarm 中,我完成了所有基本设置(此时,“用户名”仍然正确。我检查了):
public void SetAlarm(Context context) {
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 1000 * 60 * interval, pi);
}
然后我停止服务,然后再次启动它(使用 SetAlarm)。
public void CancelAlarm(Context context) {
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
问题出在 onReceive.. 第一次“用户名”字段是正确的。第二次,如果用户名在服务停止和启动之间更新,但是,它返回第一个值。该值似乎没有更新...
public void onReceive(Context context, Intent intent) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
Log.e("hi", settings.getString("username", ""));
}
【问题讨论】:
-
如何更改用户名?确保在将其放入共享首选项之前保存正确的用户名
-
可悲的是,我只是在做典型的 putString 然后是 editor.commit()。有趣的是,如果我执行 getString,它会一直拉取更新的用户名,直到最后一步 onReceive..
-
我也遇到了同样的问题。你找到解决这个问题的方法了吗?
标签: android broadcastreceiver sharedpreferences alarmmanager