Похоже, что SharedPreferences в BroadcastReceiver не обновляются?

У меня есть действие, которое обновляет строку в SharedPreferences.

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = settings.edit();
editor.putString("username", username);
editor.commit();

Затем я запускаю службу:

startService(new Intent(this, MyService.class));

Служба создает ссылку на Alarm, которая расширяет BroadcastReceiver:

Alarm alarm = null;
public void onCreate() {
    alarm = new Alarm();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    alarm.SetAlarm(this);
}

В SetAlarm я выполняю все основные настройки (на данный момент «имя пользователя» все еще правильно.. i проверено):

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", ""));
}
12
задан spalt 11 April 2012 в 02:13
поделиться