Android 应用桌面角标显示
前言
### 什么是角标?
1
首先如图1所示,角标就是当有消息来的时候,桌面上应用的图标会用数字显示新消息的条数。
应用角标先出现在ios系统上,apple用于消息通知。实际上,Android原生系统并不支持桌面应用角标的显示,各个Android厂商在定制系统的时候,模仿ios系统,实现了这个功能,角标实现主要是厂商定制Launcher(启动器)来实现,为应用预留了接口。具体地,在应用开发中实现方法主要分为两种,通过getContentResolver或是sendBroadcast方式传递消息数目来实现。不同的厂商需要的权限和传递参数不同,所以需要根据不同的厂商单独实现,此外,并不是每个厂商都将角标功能对外开放了,下面主要介绍常见厂商角标功能的实现方法。
华为
跟华为开发者联盟客服联系确认,华为已经将角标的权限对外开放,不用再去申请证书什么的麻烦操作。亲测华为角标支持EMUI 3.1及以上。具体实现如下:
a) 声明权限,如下:
<uses-permission android:name=" com.huawei.android.launcher.permission. CHANGE_BADGE"/>
1
b) 在需要进行角标显示地方,采用如下方法传递数据给华为桌面应用
Bundle extra =new Bundle();
extra.putString("package", "xxxxxx");
extra.putString("class", "yyyyyyy");
extra.putInt("badgenumber", i);
context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, extra);
package:应用包名
class:桌面图标对应的应用入口Activity类
badgenumber:角标数字
附加华为开发者联盟传送门
oppo
网上开源的ShortcutBadger里面实现了oppo的角标功能,亲测发现只有部分机型可用,在oppo的2.1系统上可以使用,3.0以后就不行了。实际上,oppo对角标的管控比较严,跟oppo客服联系过,若要使用角标功能,必须提交申请,审核通过了才能开放,官方给的具体审核标准如下:
申请角标接入规则(应用必须适配OPPO手机,保证角标功能测试通过)
a) 系统应用
b) 国内外各区域用户量排名Top5的三方即时通讯类应用,且只允许显示即时通信消息类通知(如QQ、微信、facebook、line)
c) OPPO公司内部费商业化及运营性质的办公类型即时通信应用(如Teamtalk)
4) 国内外邮件类应用(各区域各属于用户量第一梯队的应用)
oppo开放平台 也可以发邮件至devkefu@oppo.com 咨询
小米
小米官方文档
三星
三星手机首先是申请权限,然后通过广播添加角标。
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
intent.putExtra("badge_count", count);
intent.putExtra("badge_count_package_name", context.getPackageName());
intent.putExtra("badge_count_class_name", launcherClassName);
context.sendBroadcast(intent);
vivo
vivo、三星、小米手机、htc都比较友好,都通过广播设置角标,亲测都有效
Intent intent = new Intent("launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM");
intent.putExtra("packageName", context.getPackageName());
intent.putExtra("className", launcherclassname);
intent.putExtra("notificationNum", count);
context.sendBroadcast(intent);
htc
申请权限
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
ComponentName cn = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent();
Intent intent1 = new Intent("com.htc.launcher.action.SET_NOTIFICATION");
intent1.putExtra("com.htc.launcher.extra.COMPONENT", cn.flattenToShortString());
intent1.putExtra("com.htc.launcher.extra.COUNT", badgeCount);
Intent intent = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT");
intent.putExtra("packagename", cn.getPackageName());
intent.putExtra("count", badgeCount);
ct.sendBroadcast(intent1);
ct.sendBroadcast(intent);
以上是所有亲测有效可以设置桌面角标的厂商,其余的SONY、LG等等大家可以参考ShortcutBadger 或是在官网开发者论文里面查找,另外魅族厂商是不支持角标显示功能的。
————————————————
版权声明:本文为CSDN博主「何框框」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014006343/article/details/77978359