Android-小米桌面图标显示角标数

基本介绍

最近有群里问:怎样在小米手机桌面的图标上显示角标数,我看了下我的红米note手机,果然有的第三方app图标上显示角标数,尤其是微信和QQ。这让我立马想到了:小米是不是对通知栏做了手脚。立马我查了相关文档并做了相关的测试,发现果然如我猜测的:MIUI系统对通知栏做了手脚。它目前有两种情况:

  1. 默认情况
    当第三方app向通知栏发送一条通知(一般不带进度条并且用户可以删除的通知),那么此时app icon的角标数就会显示1。
    这个时候app显示的角标数和通知栏里app发送的通知数是对应的,即向通知栏发多少条通知就会显示多少角标数。
  1. 定义角标数量
    如果想让app在通知栏里只显示一条通知,但角标数是多个怎么办呢?

    原理是通过反射拿到Notification的私有属性extraNotification,重点就是这个extraNotification,MIUI系统对这个重定义了,这个类在MIUI系统里是android.app.MiuiNotification这个类,这个类里面有个私有属性messageCount,我们只要改变这个messageCount值就能显示的改变app icon的角标数了。如下图所示:

miuinotification

这里给出代码示例:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("小米角标")
            .setContentText("miui桌面角标消息");

    NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this);

    Notification notification = builder.build();
    try {
        Field field = notification.getClass().getDeclaredField("extraNotification");

        Object extraNotification = field.get(notification);

        Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);

        method.invoke(extraNotification, 10);
    } catch (Exception e) {
          e.printStackTrace();
    }

    managerCompat.notify(0, notification);

上面的数字10就是要显示的角标数,我们看下结果:

app-icon