12

我正在我的应用程序中实现 GCM 并保留通知哈希以跟踪通知阴影中的内容(我必须根据用户是否在应用程序中更改意图)。

我为所有通知设置了 deleteIntent PendingIntent。所有这一切都是从我的本地哈希中删除通知,这样它就不会再更新了。如果我清除所有或滑动以删除通知,则意图被触发。但是,我还将通知设置为自动取消。单击通知不会触发我的通知的 deleteIntent。

我的问题是,当我的通知被自动取消时,有什么方法可以通知?

4

3 回答 3

20

已经报告了这个错误,但它看起来根本没有被调查过。为了解决这个问题,这就是我所做的:

  • 关闭自动取消
  • 对内容使用广播并删除具有不同操作的意图
  • 广播接收器检查动作
    • 内容操作:点击和删除操作,手动取消通知
    • 删除操作:只做删除操作

例如:

发送通知

Notification.Builder builder = new Notification.Builder(context)
    // Set other properties (not auto-cancel)
    .setContentIntent(PendingIntent.getBroadcast(context, 0, new Intent(NOTIFICATION_CLICKED_ACTION), 0))
    .setDeleteIntent(PendingIntent.getBroadcast(context, 0, new Intent(NOTIFICATION_DELETED_ACTION), 0));
notificationManager.notify(NOTIFICATION_ID, builder.build());

接收广播

if (intent.getAction().equals(NOTIFICATION_CLICKED_ACTION)) {
    startActivity(new Intent(context, MyActivity.class));
    notificationManager.cancel(NOTIFICATION_ID);
}
// Do deletion behaviour here (for both click and delete actions)
于 2013-04-12T16:34:41.950 回答
2

是Android SDK 文档中所述的 DeleteIntent 的正确行为:

提供 PendingIntent 以在用户明确清除通知时发送。

只有当用户通过滑动或使用通知菜单的“全部清除”功能明确清除通知时,才会调用 DeleteIntent。即使 AutoCancel 设置为 True,点击通知也只会触发 ContentIntent。

于 2013-04-12T01:43:01.400 回答
1

文档在这里这里说,单击带有 FLAG_AUTO_CANCEL 的通知会自动取消它。此行为还意味着常规 contentIntent(如果已设置)将与自动取消一起触发,因为它是为响应用户的点击操作而触发的。使用 contentIntent 字段和 deleteIntent 来检测由显式用户点击执行的取消。

于 2012-11-29T12:37:51.223 回答