HarmonyOS鸿蒙Next手表开发相关问题
HarmonyOS鸿蒙Next手表开发相关问题 1,我们接入RTOS的系统手表在鸿蒙手机上就不能使用通知转发功能?IOS系统都支持转发,鸿蒙不应该限制其他的系统啊
2,手表好像没有通过包名获取第三方应用的图标? 企业应用好像可以通过 这个权限"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED"获取, 普通应用要怎么弄呢
你好,你解决了吗?我也遇到相同问题了,难搞,现在就是来电和各种语音消息无法同步,普通通知都没问题
更多关于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)
- 鸿蒙也支持部分RTOS手表通知转发的。鸿蒙生态有提供出口的,运动健康和WearEngine等。
- 获取第三方应用的图标,查单个应用时可用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安全模型的一部分,防止应用随意采集其他应用的信息。若必须显示图标,只能通过系统内置方法(如分享意图传递的图标),或由企业应用自行提供映射关系,但无法直接查询第三方包图标。

