zoukankan      html  css  js  c++  java
  • Android上的Badge,快速实现给应用添加角标

    应用角标是iOS的一个特色,原生Android并不支持。或许是因为当时iOS的通知栏比较鸡肋(当然现在已经改进了很多),而Android的通知栏功能强大?所以才出现了一方依赖于数字角标,一方坚持强大的通知栏,在日常使用中这两种交互方式都各有特色,没什么违和感。但是啊,总有人想搞些大新闻:

    当收到推送而应用没有未读角标时:
    安卓---什么烂手机!安卓就是不行!
    苹果---我靠,这应用竟然连角标都不支持!删掉。

    所以啊,众多手机厂商的定制系统或者Launcher都效仿iOS自定义了该功能。如果嫌适配麻烦,可以看看Github上的两个项目:

    https://github.com/leolin310148/ShortcutBadger

    https://github.com/xuyisheng/ShortcutHelper

     

    我尝试了ShortcutBadger(1.1.13):

     

    使用下来,在华为、三星、小米、索尼、APEX上实测成功。但是发现了两个问题:

     1、有些设备可能会抛出异常,导致设置失败。实测在Samsung Galaxy Note3(Android5.0)上就是如此,发现异常是在这里抛出的

    这里显示角标是通过发送广播实现,而canResolveBroadcast方法是检查是否存在该广播对应的接收器,不知为何有些设备会找不到。

    所以我down了一份代码,直接改了canResolveBroadcast方法,然后手动把aar包导入到项目中使用了

     

    2、小米比较特别,他的角标数量直接由通知栏数量决定。用以上方法处理时,通知栏会同时出现一条空的通知。所以小米的角标我做了单独处理

    在收到推送消息创建通知时,通过反射把角标数量设置进通知中,这也是官方文档中的做法。

    值得注意的一点是,如果你的通知有好几类,比如:有邮件的、有新动态的等,邮件的通知是一封邮件对应一个通知,而新动态是折叠在一起的(你有xx条新动态未读),甚至还有其他不是透传形式的推送通知的。我原以为在设置角标的时候要手动计算出当前所有通知的数量,但经过验证,我们只需要关心当前收到的这条消息,如果是折叠的就要用上述方法手动设置数量,其他的并不需要处理,一条通知对应的角标数量默认就是一,同时MIUI会自动计算通知数的总和去更新角标。

     

    3、在荣耀9上调试demo,发现一直无效,提示权限问题,但是权限是的确申请了的。

    无意发现申请了 <uses-permission android:name="android.permission.INTERNET" /> 之后就解决了。

    最后,如果你是针对某个系统或Launcher单独写时,可以直接搜索各家的适配方法,但不管是哪种。。千万别忘了在AndroidManifest中有没有添加相应的Badge权限啊~

     

    阅读原文

  • 相关阅读:
    初遇黑客
    第四周学习总结
    第三周学习总结
    关于base64编码的原理及如何在python中实现
    在python中如何将十进制小数转换成二进制
    《信息安全专业导论》第二周学习总结
    计算机科学概论速读问题
    刘谨铭的自我介绍
    师生关系
    20201318快速浏览教材提问
  • 原文地址:https://www.cnblogs.com/dmtyoung/p/6477531.html
Copyright © 2011-2022 走看看