アプリでアラームが発生し、通知が起動され、それを押すとアクティビティが起動します。問題は、複数のアラームを作成すると、通知から起動されたアクティビティが最初のアラームと同じ追加機能を取得することです。問題は、保留中のインテントに設定されたインテントまたは保留中のインテント自体にあると思います。これらのいずれかにフラグを立てる必要があるかもしれないと思いますが、どれがわからないのですか。
Intent showIntent =new Intent(context, notificationreceiver.class);
showIntent.putExtra("details", alarmname);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
showIntent, 0);
notification.setLatestEventInfo(context, "The event is imminent",
alarmname, contentIntent);
そして、通知の受信者
Bundle b = getIntent().getExtras();
String eventname = b.getString("details");
details.setText(eventname);
「詳細」の追加は、異なる値を持つ代わりに通知が次に発生するたびに同じです。インテントを設定するまで、正しい値が「詳細」に反映されるので、通知を押すたびに最初のインテントを取得するという問題があります。正しいインテントを起動するにはどうすればよいですか?私ができる限り明確であったことを願っていますありがとう!
問題は、複数のアラームを作成すると、通知から起動されたアクティビティが最初のアラームと同じ追加機能を取得することです。
正しい。
正しいインテントを起動するにはどうすればよいですか?
それは、一度に登録される2つのアラームがあるかどうかによって異なります。
そうでない場合は、 _FLAG_ONE_SHOT
_または他のPendingIntent
フラグのいずれかを使用 で2番目のPendingIntent
に新しいエクストラを使用させることができます。
ただし、異なるIntent
エキストラで2つのアラームを一度に登録する場合は、2つのIntents
をより実質的に異なるものにする必要があります。たとえば、 filterEquals()
は、2つの比較時にfalse
を返します。たとえば、setData()
またはsetAction()
を呼び出して、Intent
ごとに異なる値を指定できます。
私がその問題を解決したのは、PendingIntentを取得するときに一意のrequestCodeを割り当てることでした。
PendingIntent.getActivity(context, requestCode, showIntent, 0);
そうすることで、システムに異なる/固有の意図のインスタンスを登録しています。 Tip: requestCodeを一意にする良い方法は、現在のシステム時間を渡すことです。
int requestID = (int) System.currentTimeMillis();
別のソリューション:
PendingIntent.FLAG_UPDATE_CURRENTを次のように使用します。
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);
これは私のために働いた
私は自分のアプリでこの問題を抱えており、通知の意図を無効にするために乱数を生成しました:
int random= new Random().nextInt();
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
random,
PendingIntent.FLAG_UPDATE_CURRENT
);