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を割り当てることで、問題なく送信することができるようになる
コメント
コメントを投稿