应用角标是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权限啊~

阅读原文

Android上的Badge,快速实现给应用添加角标的更多相关文章

  1. Android上按钮解决快速点击问题

           //代码2         public abstract class NoDoubleClickListener implements OnClickListener {        ...

  2. ShortcutBadgerDemo【安卓应用角标(badge)实现方案】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改. 什么是应用角标? 1. ...

  3. ShortcutBadger添加桌面角标(Badge)

    1.简介:角标原本是苹果的ios中的东西,android原生并不支持角标,因为google的意思是让大家用notification(提示栏)即可,不过无妨,厉害的android第三方厂商可以通过在自定 ...

  4. Android 最火的快速开发框架XUtils

    参考:http://www.oschina.net/p/xutils 项目git地址https://github.com/wyouflf/xUtils 目录(?)[-] 最近搜了一些框架供初学者学习比 ...

  5. Android 与 Webservice 的快速保存

    前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...

  6. 【转】Android 最火的快速开发框架XUtils

    原文:http://blog.csdn.net/rain_butterfly/article/details/37812371 最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活 ...

  7. 如何在Android上编写高效的Java代码

    转自:http://www.ituring.com.cn/article/177180 作者/ Erik Hellman Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架 ...

  8. 页面结构化在 Android 上的尝试

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/M45DM5Ix7a2fmrsE8VPvxg 作者:b ...

  9. Android——使用Toolbar + DrawerLayout快速实现高大上菜单侧滑(转)

    今天就来使用官方支持库来快速实现这类效果,需要使用到Toolbar和DrawerLayout,详细步骤如下:(如果你还不知道这两个Widget,先自己Google吧~) 1.首先需要添加appcomp ...

随机推荐

  1. python获取日期加减之后的日期

    python语言中的datetime模块可以利用其中的方法获取不同的日期,比如获取当前日期.明天.昨天.上个月.下个月和明年.下面利用几个实例说明这些日期的获取方法,操作如下:     第一步,利用d ...

  2. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  3. Windows 使用 Visual Studio 编译 caffe

    说明:最近看 caffe 发现在 github 上下载的源码没有windows版本的,需要自己生成项目文件才能用 Visual Studio 编译,这里记录一下生成Windows项目文件的方法以及编译 ...

  4. mysql输入中文出现ERROR 1366

    MySQL输入中文出现如下错误: ERROR 1366: 1366: Incorrect string value: '\xE6\xB0\xB4\xE7\x94\xB5...' for column ...

  5. Git----GitHub Desktop的入门及使用

    1.git和GitHub的区别: 简单回答:球和球场的关系(知乎答案,觉得简单易懂) 详细介绍:git是一个版本控制工具 github是一个用git做版本控制的项目托管平台. 2.安装本地github ...

  6. 利用css+原生js制作简易钟表

    利用css+原生js制作简单的钟表.效果如下所示 实现该效果,分三大块:html.javascript.css html部分html部分比较简单,定义一个clock的div,内部有原点.时分秒针.日期 ...

  7. 响应式WEB设计的基本原则大总结

    响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...

  8. javascript正则表达式学习(二)--位置匹配

    文章首发于sau交流学习社区 一.前言 正则表达式是匹配模式,要么是匹配字符,要么匹配位置. 其实在开发中很少用到匹配位置,本篇文章主要包含: 二.什么是位置 位置:相邻字符之间的位置. 三.如何匹配 ...

  9. JS实现页面复制文字时自动加版权

    经亲自实践,尝试了各种方法,目前可行的方法主要有如下两种: 可以在任何运行使用js代码的网站中使用,比如本人在自己的博客园博客中实现了一下,读者您可亲自在本人博客上测试. 方法1: <scrip ...

  10. java并发编程(1) --并发基础及其锁的原理

    引言 多线程的知识点是一个庞大的体现,对此也是一知半解.一直想系统的深入的学习多线程的知识,奈何一直没有找到机会,好吧,其实就是懒.最近在项目中接触到一个多并发的项目,在项目中踩了无数的坑.在此下定决 ...