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权限啊~

     

    阅读原文

  • 相关阅读:
    1.27
    1.25
    Representation Learning with Contrastive Predictive Coding
    Learning a Similarity Metric Discriminatively, with Application to Face Verification
    噪声对比估计(负样本采样)
    Certified Adversarial Robustness via Randomized Smoothing
    Certified Robustness to Adversarial Examples with Differential Privacy
    Dynamic Routing Between Capsules
    Defending Adversarial Attacks by Correcting logits
    Visualizing Data using t-SNE
  • 原文地址:https://www.cnblogs.com/dmtyoung/p/6477531.html
Copyright © 2011-2022 走看看