Android 10及以上设备如何显示通知角标计数?
Android 桌面启动器图标通知计数实现方案
基础实现逻辑
Android原生系统没有提供统一的桌面角标(通知计数)API,该功能都是各厂商在自家ROM中自定义实现的,目前主流的实现方式有两种:
- 方案1:使用第三方兼容库快速适配
推荐使用ShortcutBadger开源库,已经预设了绝大多数主流厂商ROM的适配逻辑,集成成本极低:- 首先在模块级
build.gradle中添加依赖:implementation 'me.leolin:ShortcutBadger:1.1.22@aar' - 调用设置计数的代码即可:
// 数字为你想要显示的计数,0代表清空角标 ShortcutBadger.applyCount(context, 5)
- 首先在模块级
- 方案2:单独适配各厂商私有API
如果需要更高的兼容性,可以单独针对华为、小米、OPPO、vivo、三星等主流厂商的ROM分别做适配,调用各自提供的广播或者系统API设置角标,只是开发成本更高。
计数增减操作实现
你只需要在应用内本地维护全局的未读计数变量(可以存在SP或者本地数据库中)即可:
- 增加计数:先将本地存储的未读数+N(N为本次新增的未读数量),再调用上述的角标设置接口传入新的数值即可
- 减少/清空计数:用户查看消息后,将本地未读数-1或者直接置0,再调用角标设置接口更新即可,清空也可以直接调用
ShortcutBadger.removeCount(context)实现
静默推送触发计数增加的可行性
完全可以实现,具体实现逻辑如下:
- 推送侧选择发送透传消息/静默消息,这类消息不会被推送SDK主动抛出到系统通知栏,只会将消息内容传递到应用自定义的推送接收回调中
- 在推送回调中解析消息内容,更新本地存储的未读总数值,再调用角标设置接口更新桌面图标上的计数即可,全程不会在通知栏展示任何通知
注意:绝大多数厂商ROM都要求应用先获取通知权限才能正常显示角标,即使是静默更新的角标也需要用户授予通知权限,否则会更新失败。此外部分类原生ROM默认角标数量和通知栏通知数量绑定,这类设备如果要实现静默更新,需要确认ROM是否支持单独设置角标,否则只能通过「发通知后立即自动删除通知」的方式临时实现,部分系统可能会出现角标一闪而过的问题。

内容的提问来源于stack exchange,提问作者Ammy Kang
相关产品推荐
相关产品推荐

