【问题标题】:Pending Intent in Notification not getting cleared未清除通知中的待处理意图
【发布时间】:2016-02-24 10:36:03
【问题描述】:

请查看我的 Pending Intent 代码。

        notificationIntent.putExtra("is_from_notification", true);            
        notificationIntent.putExtra("push_message_id", push_message_id);
        notificationIntent.putExtra("open_target", open_target);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent contentIntent = PendingIntent.getActivity(context,notifyID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        Notification noti = new NotificationCompat.Builder(context)
                .setSmallIcon(icon_small)
                .setTicker(message)
                .setLargeIcon(largeIcon)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(title)
                .setContentText(message)
                .setContentIntent(contentIntent)
                .setAutoCancel(true).build();

        NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
       notificationManager.notify(notifyID, noti);

我的问题是,我应该在哪里以及如何清除这个待处理的意图。只要应用在最近的任务中,它就会一直存在。

【问题讨论】:

  • 没有得到您的问题...您的通知没有被清除或者您想取消这个待处理的意图..???
  • 你用上面的代码收到通知了吗?
  • 是的接收通知,但不能取消挂起的意图。
  • 您好,当您收到“应用程序在最近的任务中”之类的错误消息时。 ?
  • @Hemant 我已经编辑了我的答案,取消你的pendingIntent 使用那一行代码,你想取消你的pendingIntent。

标签: android push-notification google-cloud-messaging android-pendingintent


【解决方案1】:

只需调用 notificationManager.cancel(notifyId);

或者

调用 notificationManager.cancelAll();

希望,它会有所帮助。

【讨论】:

  • 但是您的状态栏取消通知的代码。你确定它也清除待处理的意图吗?
【解决方案2】:

要清除pendingIntent,请使用:

编辑:

PendingIntent.getActivity(context,notifyID, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT).cancel();

将此行放在代码中的某处,您想取消挂起的意图。

注意:意图必须与您的 pendingIntent 具有相同的名称和 ID,在您的情况下:notifyID 和 contentIntent

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

cancel() - 取消当前活动的 PendingIntent。只有拥有 PendingIntent 的原始应用程序才能取消它。

应该帮助你

【讨论】:

  • 没有。它没有帮助。
  • @Hemant 这只是为了把你推向正确的方向。但我已编辑我的答案供您使用。现在应该可以工作了!
  • 它不起作用,我把 PendingIntent.getActivity(getApplicationContext(), notifyID, getIntent(), PendingIntent.FLAG_UPDATE_CURRENT).cancel();在当前活动中。当前活动是从待处理的意图中调用的。
  • 错了,getIntent()必须是contentIntent这个很重要,因为这说明@987654326 @名为contentIntent 应该取消!只需将我的行复制到您的代码中即可。
  • contentintent 在 GCMBaseIntentService 中,我想从由未决意图启动的活动中取消未决意图。
猜你喜欢
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多