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 にあります。最初は「ユーザー名」フィールドが正しいです。ただし、サービスの停止と開始の間にユーザー名が更新された場合、2 回目は最初の値を返します。値が更新されないようです...
public void onReceive(Context context, Intent intent) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
Log.e("hi", settings.getString("username", ""));
}