У меня есть Activity, который обновляет строку в 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 я делаю все базовые настройки (на данный момент "имя пользователя" по-прежнему правильное.. я проверил):
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", ""));
}