Android 应用桌面角标显示

Android 应用桌面角标显示

前言

  ### 什么是角标?

​ 首先如图1所示,角标就是当有消息来的时候,桌面上应用的图标会用数字显示新消息的条数。

这里写图片描述

​ 应用角标先出现在ios系统上,apple用于消息通知。实际上,Android原生系统并不支持桌面应用角标的显示,各个Android厂商在定制系统的时候,模仿ios系统,实现了这个功能,角标实现主要是厂商定制Launcher(启动器)来实现,为应用预留了接口。具体地,在应用开发中实现方法主要分为两种,通过getContentResolver或是sendBroadcast方式传递消息数目来实现。不同的厂商需要的权限和传递参数不同,所以需要根据不同的厂商单独实现,此外,并不是每个厂商都将角标功能对外开放了,下面主要介绍常见厂商角标功能的实现方法。

华为

跟华为开发者联盟客服联系确认,华为已经将角标的权限对外开放,不用再去申请证书什么的麻烦操作。亲测华为角标支持EMUI 3.1及以上。具体实现如下:

a) 声明权限,如下:

<uses-permission android:name=" com.huawei.android.launcher.permission. CHANGE_BADGE"/>

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 或是在官网开发者论文里面查找,另外魅族厂商是不支持角标显示功能的。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页