2020年android 最新的角标适配方案

机型适配这种东西每隔两三年就会有新变化。以下为整理的主流机型发方案。随厂商变动不定期更新。
我会尽量寻找手机厂商给出的官方适配方案,下文会贴出官方对应的文档链接。由于部分机型对应厂商没有给出官方适配方案,我会在文中说明。

一,google 官方适配文档

官方文档:修改通知标志
google没有提供数字角标,而是显示圆点的方式。原则上只要向通知栏发送了一条通知 ,应用图标的右上角就会显示圆点。

2020年android 最新的角标适配方案_第1张图片
同时,google还提供了停用角标的方案:

在某些情况下,您的通知并不适合显示标志,您可以通过对 NotificationChannel 对象调用 setShowBadge(false),针对每个渠道停用标志。

例如,您可能希望在以下情况下停用通知标志:
—— 持续显示的通知:大多数持续显示的通知(例如图片处理、媒体播放控件或当前导航说明)都不适合显示为标志。
—— 日历提醒:避免当前时间发生标志事件。
—— 时钟或闹钟事件:避免与当前闹钟相关的标志通知。

google的角标是在api26引入的,但是国内厂商基本都做了适配更新,使得一些低于api26的设备也可以生效。

华为

官方文档:华为桌面角标开发指导书
前提:需要EMUI4.1 及以上。
需要声明权限

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

设置数字角标:

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:角标数字 badgenumber为0时,不显示角标

小米

官方文档:MIUI 6 至 MIUI 11 桌面角标适配说明

  1. 默认逻辑
    当应用向通知栏发送了一条通知 (除了进度条样式和常驻通知外),应用图标的右上角就会显示「1」。值得一提,角标的数字代表应用的通知数,即应用发送了「x」条通知,角标就会显示为「x」。(这一点和google的方案基本一致)

  2. 开发者如何自定义角标数
    如果开发者不满意默认逻辑,想要自定义角标的数字,可以通过调用接口告知系统,参考代码如下:

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();
}

oppo

在很多早期的博客中都说oppo没有角标方案,实际上oppo有提供角标适配方案。但是实际上它的方案比华为和小米繁琐的多。
不得不说oppo开放平台的文档分类设计的有点反人类,找了很久都没有找到对应的资料。最后还是通过oppo开发者社区询问官方人员才得到答案。
1、oppo没有像华为那样手动更新角标数字的方案,它是通过发送的通知的数量来显示数字的。
2、并不是有通知就显示,还有两个个前提:

  • 通知通道(Channel)适配
  • 接入Opush OPPO PUSH服务开启指南,内含申请功能的说明。

好消息是opush的基础服务目前是免费的。
附oppo开发者社区询问截图
2020年android 最新的角标适配方案_第2张图片

VIVO

不支持。对,就是这么直接。
我在vivo的官方网站没有发现角标的说明文档,就发了邮件到vivo官方邮箱。以下为vivo恢复的邮件截图
在这里插入图片描述
好吧,既然他们说暂未开放,但是已经在筹划了,那就先关注一段时间,说不定半年后就出新方案了。

zuk

官方文档:应用图标动态角标显示
没想到vivio都没有的服务联想居然提供了。聊胜于无

魅族

未找到官方文档。
不过根据实际测试效果来看,是走的google的路子。即发送通知到通知栏就可以了。实际请参考goole的做法。

一加

未找到官方文档。
由于没有一加的手机,猜测要么也是goole的适配方案。不过考虑到一加用的opush的推送,也有可能走oppo的适配方案。

三星

我丢人了,三星的中文文档太少了,少数的折叠屏适配的、钻孔屏适配的就没什么文档了。去外网找,是韩文的?惹不起惹不起。从国内的博客找了适配方案,试了试可以用

 String launcherClassName = getLauncherClassName(context);
            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);

sony

比三星都不如,连一篇技术文档都没找到。这手机业务已经死了吧。
抄一篇方案,有没有效没试过

final Intent intent = new Intent();
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", 0 < number);
        intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", getLauncherClassName(context));
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",
                String.valueOf(number > 999 ? 999 : number));//数字
        intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());
        context.sendBroadcast(intent);

你可能感兴趣的:(android,安卓,移动开发)