Android角标的实现 ,各品牌手机

时间:2022-08-30 14:52:45

华为系列

华为官网: 华为角标官方文档

按照华为官方文档的介绍,如果要获得应用角标支持,需要为应用申请华为证书,然后在“权签平台”下载开发者证书,再将开发者证书集成到应用中,整个流程跑下来还是很繁琐的。

那么吃瓜群众肯定就要问了,有没有简单一点的方法呢?答案当然是有的!结合华为的《角标开发指导书》中的代码参考和亲身实践,我发现只需要其中两步,也可以实现华为角标支持(目前只验证了华为mate8 和华为 p7,其他机型手头暂时没有,欢迎大家补充):

  1. 在AndroidManifest.xml中申请华为角标权限
    <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />
  2. 参考以下代码,设置应用角标即可
    Bundle bundle = new Bundle();  
    bundle.putString("package", context.getPackageName());
    String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
    bundle.putString("class", launchClassName);
    bundle.putInt("badgenumber", msgCount);
    context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bundle);
  3. 小米的实现
  4. 小米角标官网: 小米角标官方文档

    在小米机型上,系统默认是支持应用角标的,不过支持的方式非常反人类,导致经常有用户来反馈说角标数字不对的问题。小米官方文档关于默认情况是这么描述的:

    当app向通知栏发送了一条通知 (通知不带进度条并且用户可以删除的),那么桌面app icon角标就会显示1。此时app显示的角标数是和通知栏里app发送的通知数对应的,即向通知栏发送了多少通知就会显示多少角标。

    那么吃瓜群众肯定又要问了,What are you talking about?!不要慌,我举一个例子大家就明白了,比如说千牛客户端,每收到一条未读的聊天消息,就会往通知栏发送一条通知(由于业务需要,通知id都是同一个),假如用户收到了5条未读消息,理论上来说千牛的角标数字应该显示5,但是在小米机型上你会惊奇地发现角标数字居然是1。这是因为默认情况下,应用的角标数字跟应用往通知栏发送的通知数( 注意!这个通知数是根据通知id来计算的 )相对应的,在刚刚说的场景中, 虽然千牛往通知栏发送了5条通知,但是按照通知id来统计时,对应的通知数就是1,所以角标数字也就显示成1了 。

    小米官方可能也意识到了,这个奇葩的设计会导致很多用户产生困惑,所以在官方文档中也提供了修改角标数的接口。不同于其他手机系统通过广播来修改角标,小米系统是通过反射机制来修改角标,关键代码参考如下:

    Field field = notification.getClass().getDeclaredField("extraNotification");
    Object extraNotification = field.get(notification);
    Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
    method.invoke(extraNotification, unreadCount);

    VIVO系列

  5. 由于我本人的手机及时vivo

  6. 做角标的时候一直找不到dome 费了很大功夫 起始很简单
  7. Intent intent =new Intent("launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM");intent.putExtra("packageName", context.getPackageName());String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();intent.putExtra("className", launchClassName);intent.putExtra("notificationNum", msgCount);context.sendBroadcast(intent);



主要难点是 小米的手机 小米简直就是丧心病狂 推送栏与角标绑定 十分不好操作,至今我还没找到好的解决办法,希望以后多交流