HarmonyOS鸿蒙Next手表开发相关问题

HarmonyOS鸿蒙Next手表开发相关问题 1,我们接入RTOS的系统手表在鸿蒙手机上就不能使用通知转发功能?IOS系统都支持转发,鸿蒙不应该限制其他的系统啊

2,手表好像没有通过包名获取第三方应用的图标? 企业应用好像可以通过 这个权限"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"获取, 普通应用要怎么弄呢

10 回复

你好,你解决了吗?我也遇到相同问题了,难搞,现在就是来电和各种语音消息无法同步,普通通知都没问题

更多关于HarmonyOS鸿蒙Next手表开发相关问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


暂时还没有,正在收集多方面资料,有答复给你发哈哈哈,

其实普通的消息是能转发的,获取鸿蒙手机系统通知栏消息然后转发给手表,我现在就卡在微信语音通话和手机的来电手表不能实时这里,你可以参考:[@ohos.notificationExtensionSubscription (notificationExtensionSubscription模块)-ArkTS API-Notification Kit(用户通知服务)-应用服务 - 华为HarmonyOS开发者 (huawei.com)](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-notificationextensionsubscription#notificationextensionsubscriptionsubscribe)

  1. 鸿蒙也支持部分RTOS手表通知转发的。鸿蒙生态有提供出口的,运动健康和WearEngine等。
  2. 获取第三方应用的图标,查单个应用时可用bundle.getApplicationInfo。申请GET_BUNDLE_INFO权限。

第一个问题
RTOS手表在鸿蒙手机上不能使用通知转发

第二个问题

普通应用通过包名获取第三方应用图标

这里涉及两个不同等级的权限:

ohos.permission.GET_BUNDLE_INFO 是 normal 级别权限,普通应用可以声明并使用。通过 bundleManager.getBundleInfo() 传入目标应用的 bundleName,可以获取到该应用的基本信息,包括 ApplicationInfo 中的 iconId 等资源引用。使用方式大致如下:

import bundleManager from '@ohos.bundle.bundleManager';

try {
  let bundleInfo = await bundleManager.getBundleInfo(
    'com.example.targetapp',
    bundleManager.BundleFlag.GET_BUNDLE_WITH_ABILITIES
  );
  // bundleInfo.appInfo 中包含了 iconId 等信息
  let iconId = bundleInfo.appInfo.iconId;
} catch (err) {
  console.error('获取包信息失败:', JSON.stringify(err));
}

在 module.json5 中声明权限:

"requestPermissions": [
  {
    "name": "ohos.permission.GET_BUNDLE_INFO"
  }
]

不过这里有个现实问题:getBundleInfo 返回的 iconId 是一个资源 ID,指向的是目标应用自身资源包内的图标资源。普通应用拿到这个 ID 后,不能直接通过 resourceManager 加载,因为 resourceManager 默认只能加载自身应用的资源。所以也有点困难,我没有想到方案。。。。

这两个问题都属于 HarmonyOS NEXT 生态能力边界的问题,我分别说一下。


问题1:RTOS手表为什么不能使用鸿蒙手机的通知转发?

先说结论:

不是鸿蒙故意限制RTOS手表
而是通知转发能力依赖于HarmonyOS设备协同框架

目前通知转发主要支持:

  • HarmonyOS 手表
  • HarmonyOS 平板
  • HarmonyOS 耳机(部分场景)
  • 华为生态设备

背后依赖的是:

分布式软总线
设备互信
华为账号
设备协同

这些能力。

RTOS手表为什么不行?

很多第三方RTOS手表实际上走的是:

BLE GATT

协议。

例如:

来电提醒
短信提醒
微信提醒

这些通常都是:

手机APP
↓
读取通知
↓
BLE同步
↓
手表显示

并不是系统级通知转发。

HarmonyOS NEXT又有什么变化?

HarmonyOS NEXT已经没有Android兼容层。

因此:

Notification Listener

这类Android方案已经不能直接套用了。

第三方RTOS手表如果想接入:

通知同步

一般需要:

  • 手机侧APP申请通知读取能力
  • 通过BLE主动同步给手表

而不是使用鸿蒙设备协同通知转发。

为什么iPhone支持?

因为很多RTOS手表实际上使用的是:

ANCS
Apple Notification Center Service

苹果开放的BLE通知协议。

流程:

iPhone
↓
ANCS
↓
BLE
↓
手表

并不是iOS的跨设备通知转发。

所以:

iOS支持
≠
鸿蒙应该自动支持

两者技术路线不同。


问题2:普通应用如何根据包名获取第三方应用图标?

先说结论:

普通应用基本拿不到

HarmonyOS NEXT对此限制比较严格。

企业应用为什么能拿到?

企业应用拥有:

ohos.permission.GET_BUNDLE_INFO_PRIVILEGED

属于:

系统级权限
Privileged Permission

普通应用无法申请。

普通应用能获取什么?

通过 BundleManager:

bundleManager.getBundleInfoForSelf()

只能获取:

自己应用

的信息。

不能遍历系统安装应用。

能通过包名获取图标吗?

类似:

com.tencent.mm
com.eg.android.AlipayGphone

这种第三方应用图标:

普通应用
无法获取

因为涉及:

应用信息枚举
用户隐私
应用探测

HarmonyOS对此限制很严格。

有替代方案吗?

如果你的场景是:

应用列表
启动器
桌面
工具箱

一般有三种做法:

方案1

自己维护:

{
  "com.tencent.mm":"wechat.png",
  "com.eg.android.AlipayGphone":"alipay.png"
}

图标映射表。

方案2

服务端维护:

包名
↓
图标URL

客户端下载。

方案3

企业设备管理场景

如果是:

MDM
企业管理
行业终端

可以申请企业能力。

但普通AppGallery应用基本拿不到。


总结

通知转发

RTOS手表:

不能直接使用鸿蒙设备协同通知转发

建议:

手机APP读取通知
+
BLE同步给手表

这是目前主流方案。

获取第三方应用图标

普通应用:

无法通过包名获取任意第三方应用图标

GET_BUNDLE_INFO_PRIVILEGED 属于系统/企业权限。

普通应用只能:

自己维护图标库
或服务端下发图标

来实现类似效果。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

鸿蒙Next手表开发采用ArkTS语言(基于TypeScript)及ArkUI声明式框架。主要使用@Entry@Component装饰器构建页面,通过Ability(如FormAbility、ServiceAbility)实现功能。利用硬件API访问传感器、蓝牙等。分布式流转使用Distributed Kit。工具链为DevEco Studio。

问题1:RTOS手表通知转发在鸿蒙手机上不可用
鸿蒙系统出于安全和隐私考虑,对通知访问做了严格限制。非系统级应用只能接收自身通知,无法像iOS那样通过ANCS协议让蓝牙设备获取所有通知。RTOS手表要支持鸿蒙手机通知转发,需要实现HarmonyOS Connect接入规范或使用华为推送服务,但这通常要求手表端集成相关SDK。目前,未完成适配的RTOS手表确实无法在鸿蒙手机上实现通知转发,这属于系统策略差异,并非Bug。

问题2:普通应用获取第三方应用图标
普通权限的应用无法通过包名获取其他应用图标。ohos.permission.GET_BUNDLE_INFO_PRIVILEGED是特权权限,仅限系统应用申请。普通应用只能通过bundleManager.getBundleInfoForSelf获取自身信息。这是HarmonyOS安全模型的一部分,防止应用随意采集其他应用的信息。若必须显示图标,只能通过系统内置方法(如分享意图传递的图标),或由企业应用自行提供映射关系,但无法直接查询第三方包图标。

回到顶部