У меня проблема с уведомлением. Я использую firebase для уведомления.Android: уведомление о клике неравномерное поведение
Сценарий - когда полученное уведомление имеет две кнопки действий, уведомление будет перенаправлено, но я не выполнил никакой операции, и я получил второе уведомление, в этом случае умысел, который я установил для второго уведомления, будет потерян. Это происходит только тогда, когда оба уведомления перенаправляются на одну и ту же активность, но выполняют другую операцию.
вот мой код для создания уведомления.
private void createNotification(Map<String, Object> dataMap) {
final String type = dataMap.get("type") + "";
if (CommonUtil.isEmpty(type)) {
return;
}
final FirebaseService.NotificationType notificationType = FirebaseService.NotificationType.valueOf(type);
final String alert = dataMap.get("alert") + "";
String title = dataMap.get("title") + "";
String notificationMessage = alert;
notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
unreadNotifications.add(0, notificationMessage);
android.support.v4.app.NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
if (unreadNotifications.size() > 1) {
inboxStyle.setBigContentTitle("MyApp");
for (String unreadNotification : unreadNotifications) {
inboxStyle.addLine(unreadNotification);
}
inboxStyle.setSummaryText(unreadNotifications.size() + " new notifications.");
}
Intent intent;
intent = new Intent(app, LandingActivity.class);
if (dataMap.containsKey("code")) {
intent.putExtra(IntentExtras.CODE_FROM_NOTIFICATION, dataMap.get("code") + "");
}
intent.setAction(System.currentTimeMillis() + "");
PendingIntent pendingIntent = TaskStackBuilder.create(app)
.addNextIntent(intent)
.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
int icon_one = 0, icon_two = 0;
String actionTextOne = null, actionTextTwo = null;
PendingIntent actionOne = null, actionTwo = null;
Intent intentActionOne = null, intentActionTwo = null;
if (notificationType.equals(NotificationType.REQUEST_RECEIVED)) {
icon_one = R.drawable.cancel;
icon_two = R.drawable.notification_track;
actionTextOne = "Edit";
actionTextTwo = "Cancel";
intentActionOne = new Intent(app, LandingActivity.class);
intentActionOne.putExtra(IntentExtras.CODE_FROM_NOTIFICATION, dataMap.get("code") + "");
intentActionOne.putExtra(IntentExtras.EDIT, true);
intentActionTwo = new Intent(app, LandingActivity.class);
intentActionTwo.putExtra(IntentExtras.CODE_FROM_NOTIFICATION, dataMap.get("code") + "");
intentActionTwo.putExtra(IntentExtras.CANCEL, true);
} else if (notificationType.equals(NotificationType.REQUEST_CANCELED)) {
icon_one = R.drawable.reschedule;
icon_two = R.drawable.help;
actionTextOne = "Reschedule";
actionTextTwo = "Help?";
intentActionOne = new Intent(app, LandingActivity.class);
intentActionOne.putExtra(IntentExtras.RESCHEDULE, true);
intentActionTwo = new Intent(app, LandingActivity.class);
intentActionTwo.putExtra(IntentExtras.HELP, true);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(app)
.setSmallIcon(R.drawable.status_bar_icon)
.setLargeIcon(BitmapFactory.decodeResource(app.getResources(), R.drawable.notifications))
.setContentTitle(title)
.setContentText(alert)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setSound(notificationSound)
.setLights(Color.CYAN, 3000, 3000)
.setPriority(Notification.PRIORITY_HIGH);
if (notificationType.equals(NotificationType.REQUEST_RECEIVED) || notificationType.equals(NotificationType.REQUEST_CANCELED)) {
actionOne = TaskStackBuilder.create(app)
.addNextIntent(intentActionOne)
.getPendingIntent(0, PendingIntent.FLAG_ONE_SHOT);
actionTwo = TaskStackBuilder.create(app)
.addNextIntent(intentActionTwo)
.getPendingIntent(1, PendingIntent.FLAG_ONE_SHOT);
builder.addAction(icon_one, actionTextOne, actionOne)
.addAction(icon_two, actionTextTwo, actionTwo);
}
Notification notification = builder.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
int smallIconViewId = getResources().getIdentifier("right_icon", "id", android.R.class.getPackage().getName());
if (smallIconViewId != 0) {
if (notification.contentIntent != null)
notification.contentView.setViewVisibility(smallIconViewId, View.INVISIBLE);
if (notification.headsUpContentView != null)
notification.headsUpContentView.setViewVisibility(smallIconViewId, View.INVISIBLE);
if (notification.bigContentView != null)
notification.bigContentView.setViewVisibility(smallIconViewId, View.INVISIBLE);
}
}
notification.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager notificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify("MyApp", Long.valueOf(System.currentTimeMillis()).intValue(), notification);
}
когда я получаю уведомление о REQUEST_RECEIVED и не выполнять никаких действий щелчка, а затем, если в следующем уведомлении, полученное для REQUEST_CANCELED в этом случае второго действия уведомления мыши выполняет щелчки работы первого уведомления в то время как действие устанавливает для второго уведомления Безразлично» т работы.
ждет ваших предложений.
@Raphul я уже пробовал золе. но FLAG_UPDATE_CURRENT удалит предыдущее ожидающее намерение и обновит его, чтобы он не работал. –
Вы пробовали эту комбинацию с методом setAction() по этим намерениям? – Raphau
Да, я уже пробовал. –