关闭 Android 推送通知

Posted

技术标签:

【中文标题】关闭 Android 推送通知【英文标题】:Dismiss Android push Notifications 【发布时间】:2014-02-11 07:24:08 【问题描述】:

关于推送通知的一些问题。当我按下其中一个通知时,如何消除我的应用程序的所有通知?另外...如果我启动应用程序(而不是从通知),我如何解除通知?

这是我从 GcmIntentService 类发送通知的方式(如果有用的话)。

private void sendNotification(Bundle extras) 
    mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);

    NOTIFICATION_ID = Integer.parseInt(extras.getString("id"));

    Intent in = new Intent(this, PushActivity.class);
    in.putExtras(extras);
    in.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    String msg = extras.getString("msj");

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            in, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle("MY TITLE")
    .setAutoCancel(true)
    .setStyle(new NotificationCompat.BigTextStyle()
    .bigText(msg))
    .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

【问题讨论】:

试试mBuilder.cancelAll() mBuiler 不允许我这样做 .cancelAll();有什么想法吗? 为什么?去官方docs 好的,所以这接受 cancelAll(): mNotificationManager.cancelAll();但是我应该在哪里称呼它呢? 【参考方案1】:

我不确定您发出的通知是否针对同一事件,如果是这样,您可以像 Gmail 在收到第二或第三封电子邮件时那样执行所谓的“堆叠通知”。这一切都在一个通知中,因此将作为一个通知消失。这仅兼容 4.1 以上。

这是 Google 与堆栈一起提供的代码。这有什么帮助吗?

mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
mNotifyBuilder = new NotificationCompat.Builder(this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
numMessages = 0;
// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText(currentText)
    .setNumber(++numMessages);
// Because the ID remains unchanged, the existing notification is
// updated.
mNotificationManager.notify(
        notifyID,
        mNotifyBuilder.build()); 

【讨论】:

我不需要将所有的 otification 显示为一个。使用 .setAutoCancel(true) 可以很容易地忽略该通知。知道如何解雇所有这些人吗?当我启动应用程序时,如何将它们全部关闭? 好的,所以我看了一下,这不是一个坏主意。问题是它只兼容4.1以上=( 好吧有 CancelAll() 将取消所有以前的通知。这可以在单击通知时调用,然后您也可以在启动程序时添加它。这是有关管理通知的更多信息的链接。 link【参考方案2】:

试试android.app.NotificationManager.cancelAll()

【讨论】:

以上是关于关闭 Android 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Android 推送通知关闭:它是如何在内部工作的?

Android GCM:通知关闭后重复推送

Android和iPhone的推送通知[关闭]

Android推送通知权限判断及跳转到权限设置界面(完善兼容8.0)

Android Firebase 推送通知包数据问题 [关闭]

Xamarin android-应用关闭时推送通知单击删除 SQLite 数据