取消/关闭图标上的通知

3
我正在使用OneSignal向我的用户显示通知。通知功能正常,但是我发现,如果我在通知栏中通过“滑动”取消通知,则该通知将永久存在。下面是一张图片,显示了我希望在应用程序打开时立即消除的应用图标上的通知:icon 我看到了这个问题,并发现可以通过执行以下操作来解除通知:
NotificationManager nMgr = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (nMgr!=null) {
    nMgr.cancelAll();
}

但是这只取消了通知栏中的通知,但应用程序图标上的通知仍然存在,有什么办法可以在我的应用程序打开时立即取消它吗?
编辑1:
我在OnCreate中添加了上述内容,在下面的答案中也提到了OnResume,但是应用程序图标上仍然显示1。
2个回答

2

我发现使用OneSignal,可以通过在清单文件中添加以下内容来禁用应用图标徽章:

<application ...>

    <meta-data android:name="com.onesignal.BadgeCount" android:value="DISABLE" />

</application>

从8.0版本(API level 26)开始,可以通过调用以下内容来禁用通知徽章:链接。请注意,保留HTML标签。
String id = "my_channel_01";
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
mChannel.setDescription(description);
mChannel.setShowBadge(false);

NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel);

使用这个库,我可以在禁用后手动设置徽章数字。请注意,这仅支持某些制造商的设备(三星、LG、索尼和HTC)。


-2

上面的代码是完美的,但你需要做的是将这段代码添加到onResume()中,像这样:

@Override
protected void onResume() {
    super.onResume();

    NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    nm.cancelAll();
}

这就为你解决问题了。:)


通过使用这个方法,导航栏中的通知会被取消,但图标上的数字“1”仍然存在。 - ClassA
@KunalNikam 你的回答和问题/陈述中所说的有什么区别? - HB.
@HB. 在给别人的答案投反对票之前,请先做一些研究。这段代码在我的机器上可以运行,所以我把它放在这里。在提问时,他没有明确地说明他把以上代码放在哪里。在我回答后,他修改了问题。同时,在上面的评论中,他清楚地表示他在oncreate中使用它。因此,在发表任何言论之前,请先进行一些研究。 - Kunal Nikam
@KunalNikam在他的问题中表示,他已经尝试了你建议他做的事情。我也遇到了完全相同的问题,如果你去阅读One Signal文档,你会发现@ClassA是正确的。此外,你还说他应该在onResume而不是onCreate中使用它 - 你本可以解释一下为什么。我看不出将其放置在onResume中会有什么区别。 - HB.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接