想一想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

相关推荐
Lei活在当下10 分钟前
【业务场景架构实战】7. 多代智能手表适配:Android APP 表盘编辑页的功能驱动设计
android·设计模式·架构
手机不死我是天子4 小时前
《Android 核心组件深度系列 · 第 2 篇 Service》
android
前行的小黑炭4 小时前
Compose页面切换的几种方式:Navigation、NavigationBar+HorizontalPager,会导致LaunchedEffect执行?
android·kotlin·app
前行的小黑炭5 小时前
Android :Comnpose各种副作用的使用
android·kotlin·app
BD_Marathon18 小时前
【MySQL】函数
android·数据库·mysql
西西学代码19 小时前
安卓开发---耳机的按键设置的UI实例
android·ui
maki0771 天前
虚幻版Pico大空间VR入门教程 05 —— 原点坐标和项目优化技巧整理
android·游戏引擎·vr·虚幻·pico·htc vive·大空间
千里马学框架1 天前
音频焦点学习之AudioFocusRequest.Builder类剖析
android·面试·智能手机·车载系统·音视频·安卓framework开发·audio
fundroid1 天前
掌握 Compose 性能优化三步法
android·android jetpack
TeleostNaCl1 天前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea