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

相关推荐
Lotay_天天4 小时前
Android 缓存应用冻结器(Cached Apps Freezer)
android·缓存
wzj_what_why_how4 小时前
从解决一个分享图片生成的历史bug出发,详解LayoutInflater和View.post的工作原理
android
雪饼android之路4 小时前
Building Android Kernels with Bazel
android
笔沫拾光5 小时前
Flutter 与 Android 原生布局组件对照表(完整版)
android·flutter·widget·android布局
安全系统学习5 小时前
网络安全之XSS漏洞
android·前端·安全·web安全·网络安全·中间件
小蜜蜂嗡嗡5 小时前
flutter简单自定义跟随手指滑动的横向指示器
android·javascript·flutter
Rainly20007 小时前
AWS 创建VPC 并且添加权限控制
android·java·intellij-idea
User_芊芊君子8 小时前
C语言循环结构实战:while和for到底用哪个?
android·c语言·数据库
爱编码的傅同学9 小时前
Linux中的权限概念
android·java·linux
AFinalStone10 小时前
Android 16系统源码_自由窗口(一)触发自由窗口模式
android