news 2026/5/1 9:10:37

【HarmonyOS】个性化应用图标动态切换详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【HarmonyOS】个性化应用图标动态切换详解

在移动应用高度同质化的今天,图标早已不只是一个“入口”,而是用户对应用的第一印象。
在 HarmonyOS 生态中,系统能力不断下沉到应用层,开发者终于可以不再满足于“一个图标用到卸载”,而是让应用图标根据状态、主题或场景动态变化,成为真正“会表达”的界面元素。

本文将围绕HarmonyOS 中应用图标的个性化与动态切换能力展开,结合实际开发经验,介绍如何在不破坏系统规范的前提下,实现多图标配置、运行时切换以及典型应用场景设计,帮助应用在桌面层就建立清晰、直观的用户认知。

示例

开通服务

因目前功能还为beta阶段,所以需要申请开通服务。需按如下格式向华为运营人员发送邮件申请开通服务。申请审核时间为1-3个工作日,审核结果请关注邮件信息或互动中心通知。

  • 请确保申请开通图标管理服务的应用处于正式上架状态,避免服务开通失败。
  • 应用信息和开发者账号信息查询方法参见查看应用信息。

邮箱地址

agconnect@huawei.com

邮件标题

HarmonyOS应用图标管理开通申请-应用名称

邮件内容

开发者账号ID:

应用名称:

应用ID:

应用包名:

应用状态:

图标配置

开通图标管理服务后,登录AppGallery Connect,点击“APP与元服务”,在应用列表中选择已经开通图标管理服务的HarmonyOS应用,选择“分发 > 服务 > 图标管理“,进入图标管理页面,就可以管理HarmonyOS应用的个性化图标。

在图标管理页面点击“新增图标”按钮,进入创建图标页面。输入图标ID、图标名称,选择设备类型,上传图标文件,点击“保存”或者“提交”按钮,将图标保存为草稿状态或提交审核。

开发步骤

应用内可调用API查询到AGC配置的动态图标信息,用户点击切换可选的动态图标,系统切换对应的动态图标。当用户停止已选择的动态图标,可以再切换为默认图标。

查询动态图标信息

导入appInfoManager模块及相关公共模块。

import { appInfoManager } from '@kit.AppGalleryKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { BusinessError } from '@kit.BasicServicesKit';

调用queryDynamicIcons方法切换动态图标。

try { appInfoManager.queryDynamicIcons() .then((queryResult: appInfoManager.DynamicIconInfo[]) => { hilog.info(0, 'TAG', "Succeeded in getting DynamicIconInfo size = " + queryResult.length); for (let i = 0; i < queryResult.length; i++) { hilog.info(0, 'TAG', "Succeeded in getting DynamicIconInfo iconUrl = " + queryResult[i]["iconUrl"] + ", iconId = " + queryResult[i]["iconId"] + ", enabled = "+queryResult[i]["enabled"]); } }).catch((error: BusinessError) => { hilog.error(0, 'TAG', "queryDynamicIcons failed, code: " + error.code + ", exception message: " + error.message); }); } catch (error) { hilog.error(0, 'TAG', "queryDynamicIcons exception code: " + error.code + ", exception message: " + error.message); }

切换动态图标

导入appInfoManager模块及相关公共模块。

import { appInfoManager } from '@kit.AppGalleryKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { BusinessError } from '@kit.BasicServicesKit';

调用selectDynamicIcon方法切换动态图标。

try { let iconId: string = 'iconId'; appInfoManager.selectDynamicIcon(iconId).then(() => { hilog.info(0, 'TAG', "Succeeded in selecting dynamic icon"); }).catch((error: BusinessError) => { hilog.error(0, 'TAG', "selectDynamicIcon failed, code: " + error.code + ", exception message: " + error.message); }); } catch (error) { hilog.error(0, 'TAG', "selectDynamicIcon exception code: " + error.code + ", exception message: " + error.message); }

恢复默认图标

导入appInfoManager模块及相关公共模块。

import { appInfoManager } from '@kit.AppGalleryKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { BusinessError } from '@kit.BasicServicesKit';

调用disableDynamicIcon方法恢复默认图标。

try { appInfoManager.disableDynamicIcon().then(() => { hilog.info(0, 'TAG', "Succeeded in disabling dynamic icon"); }).catch((error: BusinessError) => { hilog.error(0, 'TAG', "disableDynamicIcon failed, code: " + error.code + ", exception message: " + error.message); }); } catch (error) { hilog.error(0, 'TAG', "disableDynamicIcon exception code: " + error.code + ", exception message: " + error.message); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:39:46

【Processing】读取并全屏显示、编辑图片模板

本文展示了两种在Processing中全屏显示图片的方法。第一种是基础实现&#xff0c;仅全屏显示图片&#xff1b;第二种增加了交互功能&#xff0c;包括局部像素处理&#xff08;将特定位置像素改为绿色&#xff09;和文字显示&#xff08;通过按键切换"IP_ON"/"IP…

作者头像 李华
网站建设 2026/4/16 16:55:56

嵌入式5个“宝藏开源项目”复刻完,代码能力直接封神

嵌入式5个“宝藏开源项目”复刻完&#xff0c;代码能力直接封神 写代码时你是不是也遇到过这些“崩溃瞬间”&#xff1f; 驱动能写但架构建不出来&#xff0c;扩功能就得大改&#xff1b;代码凑活能跑&#xff0c;可复用性为零&#xff0c;后续维护堪比拆炸弹&#xff1b;啃完几…

作者头像 李华
网站建设 2026/4/18 13:16:50

WebSocket 实时聊天功能

在上一讲中&#xff0c;Spring Boot 后端实现 WebSocket 已创建过后端项目&#xff0c;现在开始补充前端 在项目下新增一个模块frontend【与后端src目录平级】 在前端目录下执行npm install 不看上一讲也可以&#xff0c;直接创建一个前后端项目即可&#xff0c;下面会给出完整…

作者头像 李华
网站建设 2026/5/1 0:36:53

蓝桥杯103 日期问题

题目链接&#xff1a;https://www.lanqiao.cn/problems/103/learning/ 前置知识 输入解析 要会什么&#xff1f; 会用这一句把 AA/BB/CC 读进来&#xff1a; int a,b,c; scanf("%d/%d/%d", &a, &b, &c); 要记住什么&#xff1f; "%d/%d/%d"…

作者头像 李华
网站建设 2026/5/1 5:06:47

leetcode解题方法

双指针法&#xff1a;适用于有序数组去重、两数之和等问题。通过左右指针减少时间复杂度至O(n)。示例代码&#xff1a;c复制插入int removeDuplicates(int* nums, int numsSize) {if (numsSize 0) return 0;int slow 0;for (int fast 1; fast < numsSize; fast) {if (num…

作者头像 李华
网站建设 2026/5/1 5:06:21

八)--工具和MCP调用

1. 工程结构概览Spring AI 提供了完整的工具调用&#xff08;Tool Calling&#xff09;能力&#xff0c;让 AI 模型可以调用外部服务。同时&#xff0c;Spring AI 还支持 MCP&#xff08;Model Context Protocol&#xff09;&#xff0c;这是一个标准化的工具协议。spring-ai-m…

作者头像 李华