前言
最近参与了一个系统应用开发的项目,负责电话模块,其中有一个功能需求是在收到未接来电时,在systemUI上显示角标,显示未接来电数,并在打开通话记录后,清除掉未接来电。查了一些资料后,记录下目前比较常用的角标方案。
内容
Android原生支持角标,是通过Notification实现的,但是没有数字;需要实现带数字的角标,需要厂商自己定制。
常见的方案
系统厂商,可从以下方案入手思考
方案 | 做法 | 优势 | 劣势 |
---|---|---|---|
FW自行监听通知 | 定制Notification,添加msgCount参数;自定义广播接收APP发来的数据。 | 不用把角标逻辑耦合在APP | SytemUI耦合Notify逻辑 |
APP把角标存到数据库 | APP通过ContenResolver把角标数据存到系统数据库中,FW监听数据库变化。 | 可自行控制SystemUI角标显示 | APP要关心角标的逻辑 |
华为是用的第二种方案,华为桌面角标开发指导书
第三方APP可从下面的库找到解决方案
原理上还是针对不同的机型做适配,如果设备本身不支持就没有办法了。
https://github.com/leolin310148/ShortcutBadger
小结
详细的每个主机厂商对应用角标的支持情况可见下文,讲的很详细了:
Android开发:史上最全Android应用角标适配方法