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权限啊~
Android上的Badge,快速实现给应用添加角标的更多相关文章
- Android上按钮解决快速点击问题
//代码2 public abstract class NoDoubleClickListener implements OnClickListener { ...
- ShortcutBadgerDemo【安卓应用角标(badge)实现方案】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 本文主要使用的开源库是 leolin310148/ShortcutBadger,但是在其基础上做了一些修改. 什么是应用角标? 1. ...
- ShortcutBadger添加桌面角标(Badge)
1.简介:角标原本是苹果的ios中的东西,android原生并不支持角标,因为google的意思是让大家用notification(提示栏)即可,不过无妨,厉害的android第三方厂商可以通过在自定 ...
- Android 最火的快速开发框架XUtils
参考:http://www.oschina.net/p/xutils 项目git地址https://github.com/wyouflf/xUtils 目录(?)[-] 最近搜了一些框架供初学者学习比 ...
- Android 与 Webservice 的快速保存
前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...
- 【转】Android 最火的快速开发框架XUtils
原文:http://blog.csdn.net/rain_butterfly/article/details/37812371 最近搜了一些框架供初学者学习,比较了一下XUtils是目前git上比较活 ...
- 如何在Android上编写高效的Java代码
转自:http://www.ituring.com.cn/article/177180 作者/ Erik Hellman Factor10咨询公司资深移动开发顾问,曾任索尼公司Android团队首席架 ...
- 页面结构化在 Android 上的尝试
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/M45DM5Ix7a2fmrsE8VPvxg 作者:b ...
- Android——使用Toolbar + DrawerLayout快速实现高大上菜单侧滑(转)
今天就来使用官方支持库来快速实现这类效果,需要使用到Toolbar和DrawerLayout,详细步骤如下:(如果你还不知道这两个Widget,先自己Google吧~) 1.首先需要添加appcomp ...
随机推荐
- fiddler抓包软件的使用--请求头--ajax
User-Agent: FiddlerHost: localhost:49828Content-Length: 0Accept: application/xmlContent-Type: applic ...
- bzoj 1592 dp
就是dp啊 f[i][j]表示到第i位,最后一位高度是j的最小花费 转移::f[i][j]=minn(f[i-1][k])+abs(a[i]-num[j]);(k<=j) #include< ...
- BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配
BZOJ_1433_[ZJOI2009]假期的宿舍_二分图匹配 题意: 学校放假了······有些同学回家了,而有些同学则有以前的好朋友来探访,那么住宿就是一个问题.比如A 和B都是学校的学生,A要回 ...
- 从MVC和三层架构说到SSH整合开发
相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println( ...
- 权限系统与RBAC模型概述[绝对经典]
0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBA ...
- 关于WebSocket需要知道
WebSocket 概念 WebSocket是再单个TCP连接上进行双工通讯的协议,仅需要通过一次握手两个之间就可以创建持久性的连接,进行双向数据传输.WebSocket 是HTML5新增加的协议. ...
- js的异步加载你真的懂吗
面试高频之js的异步加载 讲这个问题之前, 我们从另一个面试高频问题来切入, 我们的web页面从开始解析到页面渲染完成都经历了什么 ? 1 , 创建document对象, 开始解析页面, ...
- 【工具篇】Selenium 学习实践(一)环境搭建
一.环境搭建 (1)初学者最佳环境: Python 2.7 + Selenium 2+ Firefox 46 (2)喜欢尝新的环境: Python 3.6 + Selenium 3+ Firefox ...
- SpringCloud-分布式链路跟踪配置详解
SpringCloud-分布式链路跟踪 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:作者使用IDEA + Gradle 注:需要有一定的java SpringBoot and ...
- 简易版本vue的实现
用了Vue也有两年时间了,一直以来都是只知其然,不知其所以然,为了能更好的使用Vue不被Vue所奴役,学习一下Vue底层的基本原理. Vue官网有一段这样的介绍:当你把一个普通的JavaScript对 ...