3.1 Release中deviceManager调用startDeviceDiscovery接口发现设备失败问题分析报告
1 关键字
3.1 Release;deviceManager;startDeviceDiscovery;发现设备失败;
2 问题描述
环境:OpenHarmony 3.1 Release
问题现象:使用设备管理模块deviceManager中接口startDeviceDiscovery来发现周边设备时,注册的设备发现失败回调监听'discoverFail'返回错误码1008,设备发现失败。
3 问题原因
3.1 正常机制
使用设备管理模块deviceManager调用startDeviceDiscovery接口发现设备,注册的设备发现失败回调监听'discoverFail'不会返回错误码,并且当成功发现一台或多台设备时,注册的发现设备回调监听'deviceFound'将返回设备信息集合。
deviceFound success info: {"subscribeId":4592,"device":{"deviceId":"80ACC25D1D6E3D90E42D8395A9D73211FF0B04ECC82F1D5C941EA6C8FC61F11E"
,"networkId":"","deviceName":"OpenHarmony","deviceType":0}}
3.2 异常机制
使用设备管理模块deviceManager调用startDeviceDiscovery接口发现设备,注册的设备发现失败回调监听'discoverFail'返回错误码1008,设备发现失败。
discoverFail data= {"subscribeId":8232,"reason":1008}
4 解决方案
通过修改签名配置,将当前应用设置为系统应用,再次调用该接口。
修改签名配置:
1.进入IDE-Settings设置中,查看当前引入的OpenHarmony SDK配置。


2.根据当前工程在创建时选择的SDK版本(API Version 8 或 API Version 9),确定当前工程引用的SDK版本。例如上图中,API Version 8对应的SDK版本为3.1.7.5,API Version 9对应的SDK版本为3.2.5.5。之后在本地找到对应SDK文件夹下的toolchains文件夹,并进入对应目录3.1.7.5或3.2.5.5中,然后进入lib目录中。



3.修改lib目录中的UnsgnedReleasedProfileTemplate.json文件,将该文件中"app-feature"节点值修改为:"hos_system_app"。hos_system_app即代表系统级应用。

4.进入IED重新进行自动签名。

签名成功后,重新安装应用,并调用startDeviceDiscovery接口,能够成功发现设备。
5 定位过程
1.查看OpenHarmony 3.1 Release源码中startDeviceDiscovery接口的源码,确认返回码是从命名空间为DistributedHardware中的枚举获取的。

2.根据1008报错码,找到对应枚举为DM_NOT_SYSTEM_APP,报错解释为:"the caller is not a system app",表示调用方不是系统应用程序,那么根据该报错,判断需要将应用修改为系统应用方可解决问题。




6 知识分享
1.OpenHarmony中存在较多只能由系统应用调用的接口,在调用时,必须将该应用升级为系统级应用。
2.普通应用升级为系统应用最关键的步骤是将签名文件夹toolchains下lib目录中的UnsgnedReleasedProfileTemplate.json文件的"app-feature"节点值修改为:“hos_system_app”。
更多推荐

所有评论(0)