安卓开发之应用角标

时间:2024-03-13 19:24:56

目前来说 原生的Android系统,是不支持应用角标的

所以各大手机厂商便自己定制Launcher来实现,然后提供接口给外部使用。然而就会出现每个手机品牌厂商的方式各不相同

安卓开发之应用角标

特殊机型适配

华为系列

   华为角标官方文档 : http://developer.huawei.com/cn/consumer/wiki/index.php?title=%E5%8D%8E%E4%B8%BA%E6%A1%8C%E9%9D%A2%E8%A7%92%E6%A0%87%E4%BB%8B%E7%BB%8D

1 在AndroidManifest.xml中申请华为角标权限


2 参考以下代码,设置应用角标即可

Bundle bundle = new Bundle();
bundle.putString(“package”, context.getPackageName());
String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
bundle.putString(“class”, launchClassName);
bundle.putInt(“badgenumber”, msgCount);
context.getContentResolver().call(Uri.parse(“content://com.huawei.android.launcher.settings/badge/”), “change_badge”, null, bundle);

小米系列

  小米角标官方文档 : https://dev.mi.com/docs/appsmarket/technical_docs/badge/

MIUI6&7上重新设计了桌面app图标的角标显示,基本规则如下:

一、基本介绍

1、默认的情况

当app 向通知栏发送了一条通知 (通知不带进度条并且用户可以删除的),那么桌面app icon角标就会显示1.此时app显示的角标数是和通知栏里app发送的通知数对应的,即向通知栏发送了多少通知就会显示多少角标。

2、通知可以定义角标数

例如 有5封未读邮件,通知栏里只会显示一条通知,但是想让角标显示5. 可以在发通知时加个标示。

二、实现代码

第三方app需要用反射来调用,参考代码:

NotificationManager mNotificationManager = (NotificationManager) this

.getSystemService(Context.NOTIFICATION_SERVICE);

Notification.Builder builder = new Notification.Builder(this)

.setContentTitle(“title”).setContentText(“text”).setSmallIcon(R.drawable.icon);

Notification notification = builder.build();

try {

Field field = notification.getClass().getDeclaredField(“extraNotification”);

Object extraNotification = field.get(notification);

Method method = extraNotification.getClass().getDeclaredMethod(“setMessageCount”, int.class);

method.invoke(extraNotification, mCount);

} catch (Exception e) {

e.printStackTrace();

}

mNotificationManager.notify(0,notification);

OPPO系列

  
   官方文档中介绍

一、应用角标介绍
1. ColorOS 的角标功能是 OPPO 手机提供给各应用展示未读信息的操作功能之一,
可以实现在应用图标右上角显示未读通知数量,便于用户及时处理;
2. OPPO 始终站在用户的角度,为用户提供更好的服务体验。为了防止角标信息泛
滥,对用户造成困扰,故 ColorOS 的角标主要采取邀请制的形式,未邀请的应用
需主动申请,经 OPPO 方评审通过后,方可接入。
二、应用角标开放原则
OPPO 手机为了保护用户体验,ColorOS 的角标功能主要采取邀请制为主,开发者主
动申请为辅的原则,推送内容需遵循国家规范,其中营销类和推广类应用暂不接受申请
1. 从保护用户体验的角度出发,ColorOS 的角标功能采取邀请制,暂时只邀请用户
量较大的即时通信类、邮件类应用;
2. 未收到邀请的应用,角标接入需按照流程主动申请,经 OPPO 方评估后,应用角
标能够提升用户体验的应用,方可通过申请;
3. 申请接入应用角标的应用必须不违反国家或地方相关法律和政策规定;
4. ColorOS 的角标功能不允许应用发出营销活动、广告等任何商业推广类通知。
三、应用角标申请规范
1. 应用成功申请 ColorOS 的角标功能后,在不违反相关法律法规、OPPO 开放平台
管理规定及本规范的情况下,将始终保留该应用的角标功能,除非 OPPO 方终止
应用角标的运营;
2. 当出现如下情形,OPPO 方有权取消其角标权限:
a) 应用未经 OPPO 方允许,擅自推送不符合 ColorOS 的角标开放原则的通知,
取消其角标权限;
b) 收到用户反馈或经 OPPO 方发现,该应用角标打扰了用户手机的正常使用,
经 OPPO 方调查属实,取消其角标权限;
c) 由应用方原因造成该应用角标功能异常的,将取消其角标权限。 四、应用角标申请流程
备注:当开发者对应用角标申请结果存有异议时,可通过邮件或在线客服的形式,联系 OPPO 开放平
台(客服邮箱:[email protected])。
五、应用角标申请方式
开发者可通过邮件的形式提交申请,邮件形式如下:
1. 主题:“申请开放 OPPO 手机应用角标权限——(应用名称)”
2. 收件人:[email protected]
3. 正文:详见——应用角标申请所需材料
六、应用角标申请所需材料
1. 应用方申请人基本信息(姓名、邮箱、手机、微信);
2. 应用方厂商介绍(不少于 200 字);
3. 申请应用近一个月内 IOS 与安卓系统的平均日活量及总下载量介绍;
4. 申请应用产品主要功能介绍(不少于 100 字);
5. 申请应用期望角标出现的全部场景。 七、应用角标审核周期
应用方以邮件的形式申请接入角标后,OPPO 方审核人员将在接收日期 10 个工作日内
给出审核结果。
八、常见问题 FAQ
1. 问:在其他非 OPPO 手机上是否可以使用 OPPO 手机的应用角标功能?
答:不可以,只能支持 OPPO 设备的功能,且系统版本必须在 ColorOS 3.0 及以上
2. 问:ColorOS 的角标申请周期一般有多长时间?
答:ColorOS 的角标申请周期为 7-10 个工作日,请开发者耐心等待。
3. 问:对审核结果存有异议,如何进行申诉?
答:开发者如果对申请开放 OPPO 应用角标权限的审核结果存有异议,可以发送邮件
[email protected],或联系 OPPO 开放平台在线客服与我们取得联系。 九、权益说明
本规则由 OPPO 开放平台拟定,在法律范围内的最终解释权归 OPPO 开放平台所有。
OPPO 开放平台有权根据业务发展需求实时更新该规范,并将最新规范公布于 OPPO 开放
平台公告栏中,若开发者在最新规范公布后决定继续使用角标的,视为同意接受最新规范的
约束。若拒绝接受最新规范的约束,则开放平台有权暂停提供角标服务。
注:本规则 2017 年 09 月 26 日发布,自 2017 年 09 月 26 日起正式生效。
  
示例 :
   Intent intent = new Intent(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);
intent.putExtra(“packageName”, context.getPackageName());
intent.putExtra(“className”, componentName.getClassName());
intent.putExtra(“notificationNum”, badgeCount);
context.sendBroadcast(intent);

VIVO系列

  
   暂未找到官方文档

示例 :

Intent intent = new Intent(“launcher.action.CHANGE_APPLICATION_NOTIFICATION_NUM”);
intent.putExtra(“packageName”, context.getPackageName());
String launchClassName = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent().getClassName();
intent.putExtra(“className”, launchClassName);
intent.putExtra(“notificationNum”, msgCount);
context.sendBroadcast(intent);

Sony系列
   参考资料:https://developer.sony.com/2016/06/23/xperia-home-badge-api-now-publicly-available/


下面介绍一下 相关开源库

https://github.com/lixiangers/BadgeUtil
此开源库 厂商品牌并不全面 可进行学习之用

https://github.com/leolin310148/ShortcutBadger
这个开源库 相对来说还是很全面的 不过oppo的由于需要申请 暂未测试 vivo不可用(暂未查询相关原因)
目前测试的三星,华为可行

使用方式也非常简单

  1. Add mavenCentral to your build script.

    repositories {
    mavenCentral()
    }

  2. Add dependencies for ShortcutBadger, it’s available from maven now.

    dependencies {
    compile “me.leolin:ShortcutBadger:[email protected]
    }

  3. Add the codes below:

    int badgeCount = 1;
    ShortcutBadger.applyCount(context, badgeCount); //for 1.1.4+
    ShortcutBadger.with(getApplicationContext()).count(badgeCount); //for 1.1.3

  4. If you want to remove the badge

    ShortcutBadger.removeCount(context); //for 1.1.4+
    ShortcutBadger.with(getApplicationContext()).remove(); //for 1.1.3
    or

    ShortcutBadger.applyCount(context, 0); //for 1.1.4+
    ShortcutBadger.with(getApplicationContext()).count(0); //for 1.1.3

安卓开发交流群 : 595856941