ユーザーが覚えておくべきことのリストを作成できる todo アプリケーションを作成しています。リスト内のすべてのインスタンスを作成するときに、エントリーの締め切りに達するとアラームが鳴るように設定しました。アラーム受信者は通知を作成し、締め切りに達したことをユーザーに示します。
私が抱えている問題は、インテントで通知に渡す余分な文字列が正しく更新されないことです。最初のアラームは正常に機能しますが、最初のアラームに続いて作成するすべてのエントリには、最初のアラームと同じ余分な文字列が渡されます。
アラームを設定するための私のコードは次のとおりです。
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, DeadlineActivator.class);
intent.setAction("todo" + System.currentTimeMillis());
intent.putExtra("todoname", name);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
(int)System.currentTimeMillis(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, deadline.getTime(), pendingIntent);
何らかの形で役立つかどうかはわかりませんが、エントリの名前は一意です
アラームの onRecieve メソッドは次のようになります。
public void onReceive(Context context, Intent intent)
{
String todoName = intent.getStringExtra(ToDoItem.TODONAME);
NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent onClickIntent = new Intent(context, WatchToDo.class);
onClickIntent.putExtra(Auth.TARGET_TODO, todoName);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, onClickIntent, 0);
String body = "Deadline of " + todoName + " has been reached";
String title = "Deadline reached";
Notification n = new Notification.Builder(context)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pIntent)
.setAutoCancel(true)
.build();
nm.notify(NOTIFICATION_ID, n);
}
デバッグ時に、アラームのインテントを作成するときに使用した名前 var の値が正しいことがわかります。ただし、onRecieve の todoName 変数は古い値を取得し続けます。