1# **DeviceManager组件** 2 3## 简介 4 5DeviceManager组件在OpenHarmony上提供账号无关的分布式设备的认证组网能力,并为开发者提供了一套用于分布式设备间监听、发现和认证的接口。 6 7其组成及依赖如下所示: 8 9 10 11## 目录 12 13``` 14foundation/distributedhardware/devicemanager 15├── common #公共能力头文件存放目录 16│ └── include 17│ └── ipc 18│ └── model #ipc功能模块头文件存放目录 19├── display #DM显示hap代码 20│ └── entry 21│ └── src 22│ └── main 23│ ├── js #DM PIN码显示FA相关JS代码 24│ └── resources #DM PIN码显示FA相关资源配置文件目录 25├── figures 26├── interfaces 27│ ├── inner_kits #内部接口及实现存放目录 28│ │ └── native_cpp #内部native接口及实现存放目录 29│ │ ├── include 30│ │ │ ├── ipc #ipc头文件存放目录 31│ │ │ │ ├── lite #L1 32│ │ │ │ └── standard #L2 33│ │ │ └── notify #ipc回调通知头文件目录 34│ │ └── src 35│ │ ├── ipc #ipc功能代码 36│ │ │ ├── lite #L1 37│ │ │ └── standard #L2 38│ │ └── notify ipc回调通知功能代码 39│ └── kits #外接口及实现存放目录 40│ └── js #外部JS接口及实现存放目录 41│ ├── include #外部JS接口及实现欧文件存放目录 42│ └── src #外部JS接口及实现代码 43├── sa_profile 44├── services 45│ └── devicemanagerservice #devicemanagerservice服务实现核心代码 46│ ├── include 47│ │ ├── ability #与PIN码显示FA拉起管理相关头文件 48│ │ ├── auth #devie_auth交互相关头文件 49│ │ ├── ipc #进程间通信相关头文件 50│ │ │ ├── lite #L1 51│ │ │ └── standard #L2 52│ │ ├── message #消息数据解析相关头文件 53│ │ ├── requestauth #设备认证功能相关头文件 54│ │ ├── softbus #软总线相关头文件 55│ │ └── timer #定时器处理相关头文件 56│ └── src 57│ ├── ability #与PIN码显示FA拉起管理相关功能代码 58│ │ ├── lite #L1 59│ │ └── standard #L2 60│ ├── auth #devie_auth交互相关核心代码 61│ ├── ipc #进程间通信相功能代码 62│ │ ├── lite #L1 63│ │ └── standard #L2 64│ ├── message #消息数据解析相功能代码 65│ ├── requestauth #设备认证功能代码 66│ ├── softbus #通道建立功能核心代码 67│ └── timer #timer处理代码 68└── utils #公共能力头文件存放目 69 ├── include 70 │ ├── cipher #加解密功能相关头文件 71 │ ├── ipc #ipc公共头文件存放目录 72 │ │ ├── lite #L1 73 │ │ └── standard #L2 74 │ └── log #log相关头文件存放目录 75 └── src 76 ├── cipher #加解密功能代码 77 ├── ipc #ipc公共功能代码 78 │ ├── lite #L1 79 │ └── standard #L2 80 └── log #log相关功能代码 81``` 82 83## 约束 84 85- 开发语言:JS、C++ 86- 适用于Hi3516DV300单板等OpenHarmony设备 87 88 89## 接口说明 90 91当前版本设备管理服务不具备权限管理的能力,接口中的system api仅供系统调用,后续版本会进行严格的权限管控。 92接口参见[**interface_sdk-js仓库的**](https://gitee.com/openharmony/interface_sdk-js/) *ohos.distributedHardware.deviceManager.d.ts* 93 94- 公共接口: 95 96 使用DeviceManager相关接口之前,需要通过createDeviceManager接口创建DeviceManager实例; 97 98 不使用DeviceManager接口的时候需要释放对应的DeviceManager实例。 99 100| 原型 | 描述 | 101| ------------------------------------------------------------ | ------------------------------- | 102| createDeviceManager(bundleName: string, callback: AsyncCallback<DeviceManager>): void; | 以异步方法获取DeviceManager实例 | 103| release(): void; | 释放DeviceManager实例 | 104 105 106- 系统能力接口: 107 108 提供可信设备列表获取、可信设备状态监听、周边设备发现、设备认证等相关接口,该部分作为系统能力接口,仅供系统应用调用。 109 110 开始设备发现、停止发现设备接口要配对使用,使用同一个subscribeId。 111 112| 原型 | 描述 | 113| ------------------------------------------------------------ | -------------------- | 114| getTrustedDeviceListSync(): Array<DeviceInfo>; | 获取信任设备列表 | 115| on(type: 'deviceStateChange', callback: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void; | 设备状态变更回调 | 116| off(type: 'deviceStateChange', callback?: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void; | 取消设备状态变更回调 | 117| on(type: 'serviceDie', callback: () => void): void; | 服务错误回调 | 118| off(type: 'serviceDie', callback?: () => void): void; | 取消服务错误回调 | 119| startDeviceDiscovery(subscribeInfo: SubscribeInfo): void; | 开始设备发现 | 120| stopDeviceDiscovery(subscribeId: number): void; | 停止发现设备 | 121| authenticateDevice(deviceInfo: DeviceInfo, authparam: AuthParam, callback: AsyncCallback<{deviceId: string, pinTone ?: number}>): void; | 设备认证接口 | 122| verifyAuthInfo(authInfo: AuthInfo, callback: AsyncCallback<{deviceId: string, level: number}>): void; | 设备认证信息校验 | 123| on(type: 'deviceFound', callback: Callback<{ subscribeId: number, device: DeviceInfo }>): void; | 发现设备列表回调 | 124| off(type: 'deviceFound', callback?: Callback<{ subscribeId: number, device: DeviceInfo }>): void; | 取消发现设备列表回调 | 125| on(type: 'discoverFail', callback: Callback<{ subscribeId: number, reason: number }>): void; | 发现设备失败回调 | 126| off(type: 'discoverFail', callback?: Callback<{ subscribeId: number, reason: number }>): void; | 取消发现设备失败回调 | 127 128## 示例如下: 129 130``` 131// 创建DeviceManager实例: 132deviceManager.createDeviceManager('com.ohos.xxxx', (err, dm) => { 133 this.log("createDeviceManager err:" + JSON.stringify(err) + ' --success:' + JSON.stringify(dm)) 134 if (err) return; 135 dmClass = dm; 136 dmClass.on('serviceDie', data => this.log("serviceDie on:" + JSON.stringify(data))) 137}); 138 139// 注册/去注册设备上下线监听 140dmClass.on('deviceStateChange', data => this.log("deviceStateChange on:" + JSON.stringify(data))) 141dmClass.off('deviceStateChange') 142 143// 查询可信设备列表 144var array = dmClass.getTrustedDeviceListSync(); 145 146// 获取本地设备信息 147var localDeviceInfo = dmClass.getLocalDeviceInfoSync(); 148 149// 开始设备发现(发现周边不可信设备) 150var subscribeId = 0; 151dmClass.on('deviceFound', (data) => { 152 if (data == null) { 153 this.log("deviceFound error data=null") 154 return; 155 } 156 this.logList.push("deviceFound:" + JSON.stringify(data)); 157}); 158dmClass.on('discoverFail', (data) => { 159 this.log("discoverFail on:" + JSON.stringify(data)); 160}); 161subscribeId = Math.floor(Math.random() * 10000 + 1000) 162var info = { 163 "subscribeId": subscribeId, 164 "mode": 0xAA, 165 "medium": 0, 166 "freq": 2, 167 "isSameAccount": false, 168 "isWakeRemote": true, 169 "capability": 0 170}; 171dmClass.startDeviceDiscovery(info); 172 173// 停止设备发现(需要和startDeviceDiscovery接口配对使用) 174dmClass.stopDeviceDiscovery(subscribeId); 175 176// 设备认证 177var deviceInfo ={ 178 "deviceId": "XXXXXXXX", 179 "deviceName": "", 180 deviceType: 0 181}; 182let extraInfo = { 183 "appIcon": new Uint8Array(), // app图标,可选参数,可不填 184 "appThumbnail": new Uint8Array(), // app缩略图,可选参数,可不填 185 "appName": "xxxxxxxx", // 对端设备应用名称 186 "appDescription": "xxxxxxxx", // app描述 187 "business": '0', 188 "displayOwner": 0, 189} 190let authParam = { 191 "authType": 1, 192 "extraInfo": extraInfo 193} 194dmClass.authenticateDevice(this.deviceInfo, authParam, (err, data) => { 195 if (err) { 196 this.logList.push("authenticateDevice err:" + JSON.stringify(err)); 197 console.info(TAG + "authenticateDevice err:" + JSON.stringify(err)); 198 return; 199 } 200 this.logList.push("authenticateDevice result:" + JSON.stringify(data)); 201 console.info(TAG + "authenticateDevice result:" + JSON.stringify(data)); 202 token = data.pinToken; 203}); 204 205// 设备取消认证 206dmClass.unAuthenticateDevice(this.deviceInfo); 207``` 208## 系统弹框FA 209 210当前版本只支持PIN码认证,需要提供PIN码认证的授权提示界面、PIN码显示界面、PIN码输入界面; 211 212当前,由于系统通过native层直接进行弹窗的能力尚不具备,这里使用一个临时的FA来进行对应界面的弹窗。 213 214该FA为:DeviceManager_UI.hap,作为系统应用进行预置。 215 216- 编译运行: 217 218 将devicemanager/display工程导入DevEco Studio 2.2 Beta1,复制display目录下的@ohos.distributedHardware.deviceManager.d.ts文件到Sdk\js\2.2.0.1\api\common目录下,进行编译构建及运行调试. 219 220 DevEco Studio使用方法请参考[DevEco Studio使用说明](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)。 221 222- 编译环境依赖:IDE 2.2 SDK6 223 224- DeviceManager_UI.hap存放位置:[applications_hap仓库](https://gitee.com/openharmony/applications_hap) 225 226- UI显示: 227 228 DeviceManager作为认证被控端,授权提示界面、PIN码显示界面由DeviceManager_UI FA默认进行显示; 229 230 DeviceManager作为认证发起端,PIN码输入界面可以选择由DeviceManager_UI FA进行显示,还是由开发者自行显示。开发者如需自己定制PIN码输入界面,需要在authenticateDevice接口的认证参数AuthParam中,extraInfo属性里面指定displayOwner参数为1(DISPLAY_OWNER_OTHER)。 231 232### 相关仓 233**** 234 235[**interface_sdk-js**](https://gitee.com/openharmony/interface_sdk-js/) 236[**applications_hap**](https://gitee.com/openharmony/applications_hap) 237**device_manager**