文章

桌面角标适配

桌面角标适配

Android 桌面角标、桌面红点

Android 桌面角标介绍

  1. 原生系统不支持
    Android 8.0 之前原生是不支持应用角标的;8.0 及 + 的系统支持红点不支持数量
  2. 适配确实是非常坑爹的需求。原生系统根本就没有这个功能,国内很多厂家效仿 ios 都自己定义了该功能。Android 程序员就很苦逼,要适配很多机型。建议万不得已情况下还是不要进行这项工作。 其实这个功能和手机厂家没有直接的关系,而是和手机当前使用的 launcher 有直接关系。比如三星的手机我安装 Asus 桌面,这时候我们就不能适配三星 launcher 而要去适配华硕 launcher。

特别适配

小米(支持)

小米自 MIUI6.0 以后,角标的显示和通知栏 Notification 绑在一起。目前发现只有小米需要和 Notification 绑在一起才能生效。
小米需要发一个通知,进入应用后红点会自动消失,测试的时候进程只能在后台,否则没有效果

MIUI 桌面角标不显示相关问题

应用发送了通知,桌面应用角标没有显示出来

首先打开应用通知设置页面,在 ”设置-通知管理“ 里点击应用,查看 ”显示桌面图标角标“ 开关是否开启。大部分应用默认是关闭状态。其次确认通知栏中是否有该应用的通知,当然不包括媒体通知进度条通知常驻通知这三种类型通知,因为默认不会统计。 最后需要确认下通知的 messageCount 值是否正确。

MIUI12:设置 –>通知管理 –>你的 App–>显示桌面图标角标

桌面应用图标显示角标,在最近任务中关闭应用,角标消失

在最近任务关闭应用后,会清除掉应用的所有通知,因此桌面应用角标会隐藏。

应用图标显示角标,点击应用图标后,角标消失

点击应用图标后,会默认隐藏掉应用图标角标。有如下两种方式可以重新显示:

  1. 发一条新的通知,其通知 id 与之前发送的通知 id 不重复
  2. 更新已发送通知的 messageCount 值
桌面应用角标最大显示值是 9(9 条通知 messageCount 之后,超过的通知不会累计)

在通知栏显示的应用发送的通知是有条数限制的,每一个应用最多只能显示 10 条通知。在应用没有指定 groupkey 的情况下,超过 3 条系统会默认发一条 autosummary 的通知,将应用的通知成组显示。也就是说,在这种情况下,用户可见的通知数量是 9 条,在桌面显示的应用角标值也是 9。开发者可以通过设置通知 messageCount 值来突破这一限制。

通过开发者文档设置了 messageCount 值,但桌面应用角标显示的值不符合预期

桌面应用角标数值是累加应用在通知栏显示的除媒体、进度条和常驻通知外的所有通知的 messageCount 值。即并不是开发者设置了某一条通知的 messageCount 值后,桌面应用角标显示的就是设置的 messageCount 值。

绑定了 Notification,桌面角标数量是通知栏不同 NotificationId 的 messageCount 累计之和
App 在前台不显示角标,只有 App 在后台才显示
收到 IM 未读消息,干掉 App,桌面角标消失,下次打开 App 也不会有角标;下次收到通知时可以显示角标?

将首次展示的 Notification 的 id 记录下来,首次展示的 Notification 的 messageCount 设置为所有未读消息数量,后续该 NotificationId 收到新的消息还是为所有未读消息数量;收到不同 NotificationId 的消息,其 messageCount 为该 id 的所有未读消息数量

MIUI 设置第三方桌面,只有 MIUI 官方认证的桌面才能设置为默认桌面

三星(支持)

华为(高版本支持)

高版本的桌面支持;低版本的不支持,只有系统 App 支持

huawei(H60-L01) 19(4.4.2) 不支持

权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
setBadgeCount error Permission Denial: opening provider com.huawei.android.launcher.LauncherProvider from ProcessRecord{ec748ba 15837:me.hacket.launcherbadge/u0a123} (pid=15837, uid=10123) requires com.huawei.android.launcher.permission.READ_SETTINGS or com.huawei.android.launcher.permission.WRITE_SETTINGS		HuaweiBadger[[com.huawei.android.launcher]]


// or

java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider from pid=7786, uid=10015 requires com.huawei.android.launcher.permission.WRITE_SETTINGS: uid 10015 does not have com.huawei.android.launcher.permission.WRITE_SETTINGS.
    at android.app.ContextImpl.enforce(ContextImpl.java:1775)
    at android.app.ContextImpl.enforcePermission(ContextImpl.java:1787)
    at android.content.ContextWrapper.enforcePermission(ContextWrapper.java:561)
    at com.huawei.android.launcher.LauncherProvider.checkPermission(LauncherProvider.java:560)
    at com.huawei.android.launcher.LauncherProvider.call(LauncherProvider.java:575)
    at android.content.ContentProvider$Transport.call(ContentProvider.java:325)
    at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:284)
    at android.os.Binder.execTransact(Binder.java:404)
    at dalvik.system.NativeStart.run(Native Method)

OPPO(不支持,需要申请)

新款的 OPPO 仅支持内置应用、微信和 QQ 显示角标,若要使用角标功能,必须提交申请,审核通过了才能开放,官方给的具体审核标准如下:
申请角标接入规则(应用必须适配 OPPO 手机,保证角标功能测试通过)

1
2
3
4
5
6
7
a) 系统应用

b) 国内外各区域用户量排名Top5的三方即时通讯类应用且只允许显示即时通信消息类通知如QQ微信facebookline);

c) OPPO公司内部费商业化及运营性质的办公类型即时通信应用如Teamtalk);

d) 国内外邮件类应用各区域各属于用户量第一梯队的应用)。

VIVO(不支持,需要申请)

Nowa Launcher(免费版不支持,收费版支持)

nova launcher 的免费版本是没有桌面角标的功能,nova launcher prime 版本才有 (需要收费且国内各大应用市场没有提供下载)

http://novalauncher.com/

Apex Launcher (免费版不支持,pro 版支持)

apex launcher 也是需要收费。

https://www.apexlauncher.com/

Microsoft Launcher

adw launcher

adw launcher 是免费的功能正常,但是 ui 太难看。

asus launcher

asus launcher 是免费的功能正常,但是发现如果连续发送未读消息,角标显示有延迟。

其他 Launcher

  • Infinix S4(XOS v5.0.0 Android9  不支持

官方设置

https://developer.android.com/training/notify-user/badges

开源

ShortcutBadger(GP 也用了这个开源项目)
https://github.com/leolin310148/ShortcutBadger

https://github.com/ekinlyw/android-badge

http://stackoverflow.com/questions/19086189/adding-notification-badge-on-app-icon-in-android

https://github.com/beiliao-mobile/BadgeNumberManager

Ref

  • 史上最全 Android 应用角标适配方法

https://blog.csdn.net/u013541140/article/details/84822317

本文由作者按照 CC BY 4.0 进行授权