You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Android应用通知角标数字设置为0?

解决方案

要实现将应用启动器角标清零(或让特定通知不贡献计数),你需要针对不同场景采用对应的处理方式,以下是具体实现:

场景1:会话已读,无需保留通知

如果用户标记会话为已读后,不需要再显示该通知,直接取消对应ID的通知即可。系统会自动从角标总数中扣除该通知之前贡献的计数:

val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancel(SESSION_NOTIFICATION_ID) // SESSION_NOTIFICATION_ID是该会话通知的唯一ID

场景2:需保留通知,但不计入角标计数

如果要保留已读消息的通知(比如显示已读对话历史),但不让它贡献角标数字,需要做两个关键设置:

  1. 调用setBadgeIconType(NotificationCompat.BADGE_ICON_NONE),让系统忽略这条通知的角标计数
  2. 配合setNumber(0)明确标记未读数为0,同时确保MessagingStyle里的消息都标记为已读

示例代码:

val messagingStyle = NotificationCompat.MessagingStyle(me)
    .addMessage(messageText, timestamp, sender)
    // 标记所有消息为已读
    .setMessages(messages.map { it.setIsRead(true) })

val notification = NotificationCompat.Builder(this, CHANNEL_ID)
    .setStyle(messagingStyle)
    .setSmallIcon(R.drawable.ic_notification)
    .setNumber(0)
    // 关键:设置角标图标为NONE,这条通知不会计入角标总数
    .setBadgeIconType(NotificationCompat.BADGE_ICON_NONE)
    .build()

notificationManager.notify(SESSION_NOTIFICATION_ID, notification)

额外注意事项

  • 部分国产厂商(如华为、小米)有自定义的角标API,若标准API不生效,可针对性适配厂商SDK,但优先使用AndroidX的兼容方案以保证跨设备一致性
  • 角标总数是所有有效通知的setNumber()值之和,若要全局清零,需取消所有带计数的通知,或对所有通知设置BADGE_ICON_NONE

内容的提问来源于stack exchange,提问作者Petrakeas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:16:15