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”。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐