繁体   English   中英

如何使用单独的待处理意图创建多个分组通知

[英]How can I create multiple grouped notifications with individual pending intents

所以我得到的问题是带有待处理意图的通知没有共享正确的意图额外内容,这反过来又影响了我的应用程序。

目标是能够创建具有自己待处理意图多个分组通知 我了解并非所有通知都需要意图,但在我的情况下,单击的每个通知都会导致应用程序中的特定区域。

我尝试更改意图标志,但仍然遇到相同的问题。

通知创建:

PendingIntent dismissIntent = createDismissIntent(uniqueID, notification.getGroup());

notificationBuilder.setSmallIcon(smallIcon)
            .setContentTitle(notification.getTitle())
            .setContentText(notification.getMessage())
            //.setContentIntent(contentIntent)
            .setDeleteIntent(dismissIntent)
            .setColor(context.getColor(R.color.notificationColor))
            .setVisibility(visibility)
            .setPriority(priority)
            .setStyle(style)
            .setAutoCancel(true)
            .setGroup(notification.getGroup())
            .setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE);

    notificationManager.notify(uniqueID, notificationBuilder.build());

方法

private PendingIntent createDismissIntent(int uniqueID, String group) {
    Intent intent = new Intent(context, ActionReceiver.class).setAction(Constants.NotificationDismissIntent);
    intent.putExtra("id", uniqueID);
    intent.putExtra("group", group);
    return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}

接收者

        int uniqueID = intent.getIntExtra("id", 0);
        String group = intent.getStringExtra("group");

        if (intent.getAction().matches(Constants.NotificationDismissIntent)) {
            try {
                if (!intent.getBooleanExtra("isSummary", false)) {
                    boolean success = NotificationStorage.getInstance(context).removeNotification(group, uniqueID);
                    if (!success)
                        Log.d(FIREBASE_MESSAGING_TAG, "Failed to remove notification from storage");
                }
            }
        }

谢谢:)

取自待定意图文档https://developer.android.com/reference/android/app/PendingIntent

PendingIntent 本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。 这意味着,即使它拥有的应用程序的进程被杀死,PendingIntent 本身仍可用于其他已给予它的进程。 如果创建应用程序稍后重新检索相同类型的 PendingIntent(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),它将接收表示相同令牌的 PendingIntent(如果仍然有效),并且可以因此调用 cancel() 将其删除。

由于这种行为,重要的是要知道两个 Intent 何时被认为是相同的,以便检索 PendingIntent。 人们犯的一个常见错误是创建多个 PendingIntent 对象,其 Intent 仅在其“额外”内容上有所不同,期望每次都获得不同的 PendingIntent。 这不会发生。 Intent 中用于匹配的部分与 Intent#filterEquals(Intent) 定义的部分相同。 如果您使用两个根据 Intent#filterEquals(Intent) 等效的 Intent 对象,那么您将获得相同的 PendingIntent 对象。

回答:

有两种典型的方法来处理这个问题。

如果您确实需要同时激活多个不同的 PendingIntent 对象(例如用作同时显示的两个通知),那么您需要确保它们有一些不同之处,以便将它们与不同的待定意图。 这可能是 Intent#filterEquals(Intent) 考虑的任何 Intent 属性,或提供给 getActivity(Context, int, Intent, int)、getActivities(Context, int, Intent[], int)、getBroadcast( Context, int, Intent, int) 或 getService(Context, int, Intent, int)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM