应用角标是iOS的一个特点,原生Android并不支持。或许是由于当时iOS的通知栏比较鸡肋(固然如今已经改进了不少),而Android的通知栏功能强大?因此才出现了一方依赖于数字角标,一方坚持强大的通知栏,在平常使用中这两种交互方式都各有特点,没什么违和感。可是啊,总有人想搞些大新闻:html
当收到推送而应用没有未读角标时:
安卓---什么烂手机!安卓就是不行!
苹果---我靠,这应用居然连角标都不支持!删掉。android
因此啊,众多手机厂商的定制系统或者Launcher都效仿iOS自定义了该功能。若是嫌适配麻烦,能够看看Github上的两个项目:git
我尝试了ShortcutBadger(1.1.13):3d
使用下来,在华为、三星、小米、索尼、APEX上实测成功。可是发现了两个问题:调试
一、有些设备可能会抛出异常,致使设置失败。实测在Samsung Galaxy Note3(Android5.0)上就是如此,发现异常是在这里抛出的htm
这里显示角标是经过发送广播实现,而canResolveBroadcast方法是检查是否存在该广播对应的接收器,不知为什么有些设备会找不到。blog
因此我down了一份代码,直接改了canResolveBroadcast方法,而后手动把aar包导入到项目中使用了文档
二、小米比较特别,他的角标数量直接由通知栏数量决定。用以上方法处理时,通知栏会同时出现一条空的通知。因此小米的角标我作了单独处理
在收到推送消息建立通知时,经过反射把角标数量设置进通知中,这也是官方文档中的作法。
值得注意的一点是,若是你的通知有好几类,好比:有邮件的、有新动态的等,邮件的通知是一封邮件对应一个通知,而新动态是折叠在一块儿的(你有xx条新动态未读),甚至还有其余不是透传形式的推送通知的。我原觉得在设置角标的时候要手动计算出当前全部通知的数量,但通过验证,咱们只须要关心当前收到的这条消息,若是是折叠的就要用上述方法手动设置数量,其余的并不须要处理,一条通知对应的角标数量默认就是一,同时MIUI会自动计算通知数的总和去更新角标。
三、在荣耀9上调试demo,发现一直无效,提示权限问题,可是权限是的确申请了的。
无心发现申请了 以后就解决了。
最后,若是你是针对某个系统或Launcher单独写时,能够直接搜索各家的适配方法,但无论是哪一种。。千万别忘了在AndroidManifest中有没有添加相应的Badge权限啊~