即使在不同的通知中,RemoteViews setOnClickPendingIntent也会覆盖相同视图ID的Intent

时间:2016-03-14 04:37:37

标签: android android-notifications

我的应用需要显示多个通知。每个通知使用相同的自定义布局xml,其中包含一个按钮,该按钮使用额外的int(数字X)触发intent,这对于每个通知都是唯一的。

这是由RemoteViews完成的,所以我为每个通知做了类似的事情:

RemoteViews remoteViews = new RemoteViews(...);
remoteViews.setOnClickPendingIntent(R.id.myButton, myIntentWithUniqueId)
Notification myNotification = new NotificationCompat.Builder(context)
    .setContent(remoteViews)
    ...
    .build();

我在显示通知时使用不同的ID

notificationManager.notify(someUniqueId, myNotification)

我发现即使我可以显示多个通知,所有通知中的所有按钮都与显示的最后一个通知具有相同的意图。通过在按下每个通知中的按钮时看到每个通知中的意图包含相同的额外int X来验证它。

这是一个错误还是设计?

1 个答案:

答案 0 :(得分:0)

你的问题可以解决这个问题。将pendingintents添加到TaskStackBuilder。 这将检索与特定通知相关联的pendingintent。实施例..

android.support.v4.app.TaskStackBuilder stackBuilder = android.support.v4.app.TaskStackBuilder.create(this);

//                        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
                        stackBuilder.addParentStack(MainActivity.class);
                        stackBuilder.addNextIntent(resultIntent);
                        PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(notificationid, PendingIntent.FLAG_UPDATE_CURRENT);

                        //resultPendingIntent = PendingIntent.getActivity(this, notificationid, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                        mBuilder.setContentIntent(resultPendingIntent);

或尝试使用广播意图,

Intent resultDismissintent = new Intent(getApplicationContext(), NotificationCancelReceiver.class);
 resultDismissintent.putExtra("notificationId", notificationid);
 resultDismissintent.putExtras(resultIntent.getExtras());

 PendingIntent resultCancelPendingIntent = PendingIntent.getBroadcast(this, notificationid, resultDismissintent, PendingIntent.FLAG_UPDATE_CURRENT);

contentView.setOnClickPendingIntent(R.id.tv_view, resultCancelPendingIntent);
 contentView.setOnClickPendingIntent(R.id.tv_cancel, resultPendingIntent);