投稿

2月, 2021の投稿を表示しています

Notificationで押したボタンと受け取った内容が違う場合

AndroidのNotificationのボタンを作る際によく紹介されているのは以下のようなもの Intent intent1 = new Intent("Intent_Action"); intent1.putExtra(name1, value1); PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, (int)System.currentTimeMillis(), intent1, PendingIntent.FLAG_UPDATE_CURRENT); これをbuilderに setAction(pendingIntent1) するわけだが、ボタンを2つに増やすと送られてくるIntentが違うことがあった 2つ目の作りは変数部分の数字が違うだけで以下の通り Intent intent2 = new Intent("Intent_Action"); intent2.putExtra(name2, value2); PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, (int)System.currentTimeMillis(), intent2, PendingIntent.FLAG_UPDATE_CURRENT); このようにして登録すると何故か1番目のボタンを押しているにもかかわらず2番目のボタンのIntentが送られてくる場合がある 原因はPendingIntentの (int)System.currentTimeMillis() の部分にある この部分はRequestCodeとなっており、連続してpendingIntentを作成すると同じ時間の数字がRequestCodeになってしまう RequestCodeが同じになることで後の FLAG_UPDATE_CURRENT で同じものと判断されて上書きした上で発信されてしまう これを防ぐにはそれぞれのPendingIntentには別々のRequestCodeを割り当てることで、問題なく送信することができるようになる