У меня есть метод с именем sendNotification
, который можно вызывать несколько раз.
private PendingIntent createNotificationIntent(Context context, String
type, int notificationId, String extra) {
Intent notificationIntent = new Intent(this, ShimmyMobileActivity.class);
notificationIntent.putExtra("com.****.****.action", type);
notificationIntent.putExtra("com.****.****.notification_id",
notificationId);
notificationIntent.putExtra("com.****.****.notification_extra",
extra);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent intent = PendingIntent.getActivity(this, 0,
notificationIntent, PendingIntent.FLAG_IMMUTABLE);
return intent;
}
private void sendNotification(int id, String message, String extra) {
NotificationManager notificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new
Notification.Builder(ShimmyMobileActivity.this);
builder.setContentTitle("Shimmy Notification");
builder.setContentText(message);
builder.setSmallIcon(R.mipmap.ic_launcher);
//builder.setDeleteIntent(this.createNotificationIntent(this,
"notification_delete", id, extra));
builder.setContentIntent(this.createNotificationIntent(this,
"notification_clicked", id, extra));
builder.setPriority(Notification.PRIORITY_MAX);
if(this.preferences.getBoolean("vibrate", true)) {
builder.setVibrate(new long[]{500, 500});
Vibrator vibrator = (Vibrator) this
.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(500);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (this.channel == null) {
this.channel = new NotificationChannel(this.channelId,
"ShimmyMobile Notifications", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(this.channel);
}
builder.setChannelId(this.channelId);
}
Notification notification = builder.build();
notificationManager.notify(id, notification);
}
Когда пользователь выбирает уведомление, я выбираю данные, которые я связал с уведомлением в * 1005.* method.
Я делаю следующее в onResume
if(action != null && action.equals("notification_clicked".toString())) {
int notification_id =
this.getIntent().getIntExtra("com.****.****.notification_id",
-1);
String extra = this.getIntent().getStringExtra("com.****.****.notification_extra");
}
Беда в том, что данные уведомления и извещения всегда относятся к неправильному уведомлению после того, как пользователь щелкает уведомление.
Это, я думаю, из-за
PendingIntent intent = PendingIntent.getActivity (this, 0, messagesIntent, PendingIntent.FLAG_IMMUTABLE);
Но я пробовал разные флаги безуспешно.
Как я могу создать много уведомлений с прикрепленным OWN PendingIntent
?
Спасибо