想一想android桌面的未读计数角标应该如何设计呢?

背景:

近来有vip学员朋友询问到一个关于国内手机厂商是如何实现的角标的,他们是否有统一的角标方案?具体应该如何实现桌面的角标国内呢?

关于以上桌面角标实现问题,其实还算是一个手机国内的硬性指标,因为用户们看app是否有新消息都是靠app未读角标进行的,但是比较遗憾是google针对这种未读角标,并没有在最开始进行统一设计和用户接口,导致国内手机厂商很多都是各自有自己角标方案,这个无疑对手机厂商还是app厂商都是一个非常大的痛点。

痛点1:对于手机厂商,需要维护自己未读角标方案,还需要考虑的自己的手机出货量,这些第三方app是否可以适配,也就是无法保证很多app进行适配,可能导致很多app无法显示角标,用户体验不好。

痛点2:很多第三方app互联网厂商,因为各个手机厂商的角标方案都不尽相同,所以不得不对针对市面上各个手机进行挨个适配。维护成本很大

上面其实就是目前国内app角标的一个情况,其实还是非常希望google这块可以完全做好这一块未读计数角标的统一,让各个厂商和app都不用在这个国内上繁杂适配。

说完了大概目前角标情况,我们回到我们能做的技术层面,设备厂商的Launcher应该如何设计一个好的角标功能呢?让所有第三方应用适配起来方便,自身逻辑也很清晰合理呢?

这个答案我这边建议大家可以考虑去参考国内几个手机大厂的的角标sdk适配手册,这里我特别推荐大家去看看华为的角标适配sdk,看完后其实我相信你就可以推测出华为的角标在桌面的实现方案,自己也可以实现一个类似的角标方案。

下面给大家展示一下华为的角标适配sdk:

1. 简介

角标是华为桌面提供给各应用一种展示未读信息的操作,以未读信息的数字合成一张图片并绘制到该应用图标的右上角。

2. 业务样例

1. 概述

角标是华为桌面提供给各应用显示未读消息用的,会在应用图标右上角绘制一张消息条数的图标。

1.1 架构

下图展示了华为桌面角标SDK 的架构。

1.2 支持平台

系统版本:EMUI4.1 及以上

桌面版本:6.3.29

支持设备:华为设备

2. 角标功能开发指南

1、声明权限
bash 复制代码
< uses - permission android: name = "android.permission.INTERNET" / >
    <uses - permission android: name = "com.huawei.android.launcher.permission.CHANGE_BADGE " / >
2、在需要进行角标显示地方,采用如下方法传递数据给华为桌面应用。
cpp 复制代码
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);

关键参数说明:

bash 复制代码
package:应用包名
class:桌面图标对应的应用入口Activity类
badgenumber:角标数字

示例:

cpp 复制代码
boolean mIsSupportedBade = true;
if (mIsSupportedBade) {
    setBadgeNum(num);
}
/** set badge number*/
public void setBadgeNum(int num) {
    try {
        Bundle bunlde = new Bundle();
        bunlde.putString("package", "com.test.badge"); // com.test.badge is your package name
        bunlde.putString("class", "com.test. badge.MainActivity"); // com.test. badge.MainActivity is your apk main activity
        bunlde.putInt("badgenumber", num);
        this.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bunlde);
    } catch (Exception e) {
        mIsSupportedBade = false;
    }
}
3、特殊情形考虑:

对于第三应用打开和退出时,是否还继续显示角标取决应用传递的值(badgenumber为0时,不显示角标;badgenumber大于0时,显示角标)。

当第三方应用package和class发生变化时,需传递该变化后的信息。

参考地址:
https://developer.huawei.com/consumer/cn/doc/Corner-Guides/30802

相关推荐
尚久龙2 分钟前
安卓学习 之 SeekBar(音视频播放进度条)
android·java·学习·手机·android studio
人生游戏牛马NPC1号23 分钟前
学习 Android (二十二) 学习 OpenCV (七)
android·opencv·学习
Digitally1 小时前
比较 iPhone:全面比较 iPhone 17 系列
android·ios·iphone
被开发耽误的大厨1 小时前
鸿蒙项目篇-22-项目功能结构说明-写子页面和导航页面
android·华为·harmonyos·鸿蒙
安然~~~2 小时前
mysql多表联查
android·数据库·mysql
2501_915909065 小时前
HTTPS 错误解析,常见 HTTPS 抓包失败、443 端口错误与 iOS 抓包调试全攻略
android·网络协议·ios·小程序·https·uni-app·iphone
程序猿陌名!8 小时前
Android开发 AlarmManager set() 方法与WiFi忘记连接问题分析
android
骐骥19 小时前
2025-09-08升级问题记录: 升级SDK从Android11到Android12
android·android12·sdk31
CV资深专家13 小时前
Android 各分区模块编译配置(mk/bp)总结
android
louisgeek15 小时前
Java 线程池取消的方式
android