安卓原生的系统Launcher并不支持角标显示,但是大部分手机厂商或者第三方定制的Launcher都有做在AOSP代码的基础上做支持,不同Launcher提供的接口又略有不同(主流的做法其实都是发送特定广播给Launcher,然后由Launcher实现效果,即监听发出的广播来进行快捷方式的修改),所以需要分别进行适配。
一、MIUI
1、默认的情况
当app 向通知栏发送了一条通知 (通知不带进度条并且用户可以删除的),那么桌面app icon角标就会显示1.此时app显示的角标数是和通知栏里app发送的通知数对应的,即向通知栏发送了多少通知就会显示多少角标。
2、通知可以定义角标数
例如 有5封未读邮件,通知栏里只会显示一条通知,但是想让角标显示5. 可以在发通知时加个标示。
修改MIUI的原理是通过反射拿到Notification的私有属性extraNotification,但是这个extraNotification在MIUI系统中重定义了,这个类就是MIUI系统中的android.app.MiuiNotification这个类,这个类里面有个私有属性messageCount,我们只要改变这个messageCount值就能显示的改变app icon的角标数了。
http://dev.xiaomi.com/docs/appsmarket/technical_docs/badge/
二、华为EMUI Badge
角标是华为桌面提供给各应用一种展示未读信息的操作,以未读信息的数字合成一张图片并绘制到该应用图标的右上角。只能支持华为设备的功能,且系统版本必须在EMUI4.1及以上。从保护用户体验的角度出发,华为角标暂时只对较大型的纯即时通讯类应用(例:聊天工具、邮箱)和大型企业的内部办公应用开放。
http://developer.huawei.com/wiki/index.php?title=%E5%8D%8E%E4%B8%BA%E6%A1%8C%E9%9D%A2%E8%A7%92%E6%A0%87%E4%BB%8B%E7%BB%8D
三、Sony Badge
https://forsberg.ax/en/blog/android-notification-badge-app-icon-sony/
四、Samsung Badge
通过三星Launcher自己的广播,来给应用添加角标:此方法不需要任何权限,只需要知道App的包名和类名。因此,你当然可以在程序里面给其它任意一个App设置任意数量的角标,而且没有任何提示。
五、LG Badge
Samsung好基友,三星能用的,LG几乎都可以用,连Bug都一样。
六、酷派 Badge
简单粗暴,不支持。我喜欢,类原生。
七、ZUK ZUI Badge
http://developer.zuk.com/detail/12
八、HTC Badge
HTC虽然没落了,但好歹是第一只Android的寄生兽,好歹也支持下。其原理同样是使用广播。
九、锤子
锤子很遗憾,使用的是原生Launcher进行的修改,只有System App具有获得角标的权限。
十、Nova Badge
Nova是一款非常赞的Launcher,作为第三方Launcher,它的使用率非常高(当然是在国外)。该Launcher作为业界良心,提供了content provider供外界调用。与ZUK手机一样,良心大大的好,代码如下:
全文都是复制:见以下参考文献
1、知乎作者 Young Z Wang https://www.zhihu.com/question/22317508/answer/75961273
2、华为: http://developer.huawei.com/wiki/index.php?title=%E5%8D%8E%E4%B8%BA%E6%A1%8C%E9%9D%A2%E8%A7%92%E6%A0%87%E4%BB%8B%E7%BB%8D
3、https://github.com/leolin310148/ShortcutBadger