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

在移动应用高度同质化的今天,图标早已不只是一个"入口" ,而是用户对应用的第一印象。

在 HarmonyOS 生态中,系统能力不断下沉到应用层,开发者终于可以不再满足于"一个图标用到卸载",而是让应用图标根据状态、主题或场景动态变化,成为真正"会表达"的界面元素。

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

示例

开通服务

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

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

|------|----------------------------------|
| 邮箱地址 | agconnect@huawei.com |
| 邮件标题 | HarmonyOS应用图标管理开通申请-应用名称 |
| 邮件内容 | 开发者账号ID: 应用名称: 应用ID: 应用包名: 应用状态: |

图标配置

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

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

开发步骤

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

查询动态图标信息

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

javascript 复制代码
import { appInfoManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

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

javascript 复制代码
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模块及相关公共模块。

javascript 复制代码
import { appInfoManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

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

javascript 复制代码
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模块及相关公共模块。

javascript 复制代码
import { appInfoManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

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

javascript 复制代码
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);
}
相关推荐
2501_920931703 小时前
React Native鸿蒙跨平台采用ScrollView的horizontal属性实现横向滚动实现特色游戏轮播和分类导航
javascript·react native·react.js·游戏·ecmascript·harmonyos
摘星编程4 小时前
React Native鸿蒙版:Drawer抽屉导航实现
react native·react.js·harmonyos
lbb 小魔仙5 小时前
【Harmonyos】开源鸿蒙跨平台训练营DAY9:获取分类数据并渲染
flutter·华为·harmonyos
mocoding6 小时前
Flutter 3D 翻转动画flip_card三方库在鸿蒙版天气预报卡片中的实战教程
flutter·3d·harmonyos
2501_920931706 小时前
React Native鸿蒙跨平台实现推箱子游戏,完成玩家移动与箱子推动,当所有箱子都被推到目标位置时,玩家获胜
javascript·react native·react.js·游戏·ecmascript·harmonyos
C雨后彩虹7 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
24zhgjx-lxq8 小时前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
qq_177767378 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88218 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
小雨青年9 小时前
鸿蒙 HarmonyOS 6 | 系统能力 (06) 构建现代化通知体系 从基础消息到实况
华为·harmonyos