1# 分布式设备管理开发指南 2 3## 分布式设备管理简介 4 5随着用户不同种类的终端设备数量不断增多,将不同设备作为本端设备能力的扩展,使设备之间协同合作完成各种复杂场景即为设备的分布式业务。 6 7分布式设备管理是分布式业务入口,在分布式业务中对周边可信和非可信设备进行统一管理。 8 9分布式设备管理提供如下四大功能: 10 11- **发现**<br/> 12 发现周围终端设备并上报。周围设备需要连接同局域网或者同时打开蓝牙,可以根据设备类型、距离、设备是否可信等进行筛选。 13 14- **绑定**<br/> 15 不同设备协同合作完成分布式业务的前提是设备间可信,对于周边发现的不可信设备,可通过绑定使彼此建立可信关系,提供pin码、碰、扫、靠等设备认证框架,支持对接各种认证交互接口。 16 17- **查询**<br/> 18 查询功能包含:查询本机设备信息、查询周围的在线的可信设备、查询可信设备信息。 19 20- **监听**<br/> 21 监听设备上、下线。设备上线表示设备间已经可信,业务可以发起分布式操作;设备下线表示分布业务不可用。 22 23### 运作机制 24 25 设备管理作为分布式业务入口,需要应用在所使用的业务场景,向发现设备主动发起绑定建立可信关系;业务结束后由业务自主判断是否解除绑定关系,设备间可信关系的解除由业务自己控制。 26 27### 约束与限制 28 29 使用设备管理能力,需要用户确认不同设备已连接同一局域网或者蓝牙开关已开启,否则该能力不可用。 30 31 设备信息属于用户敏感数据,所以即使用户已连接同一局域网或者蓝牙开关已开启,应用在获取设备位置前仍需向用户申请数据同步权限。在用户确认允许后,系统才会向应用提供设备管理能力。 32 33## 申请分布式数据同步权限开发指导 34 35### 场景概述 36 37应用在使用分布式设备管理系统能力前,需要检查是否已经获取用户授权访问分布式数据同步信息。如未获得授权,可以向用户申请需要的分布式数据同步权限。 38 39ohos.permission.DISTRIBUTED_DATASYNC:分布式数据同步权限 40 41使用设备管理能力,必须申请权限,并且获得用户授权。 42 43### 开发步骤 44 45适用于Stage应用模型。 46 471. 在module.json5配置文件中配置分布式数据同步权限ohos.permission.DISTRIBUTED_DATASYNC。 48 49 ```ts 50 { 51 "module" : { 52 "requestPermissions":[ 53 { 54 "name" : "ohos.permission.DISTRIBUTED_DATASYNC", 55 "reason": "$string:distributed_permission", 56 "usedScene": { 57 "abilities": [ 58 "MainAbility" 59 ], 60 "when": "inuse" 61 } 62 } 63 ] 64 } 65 } 66 ``` 672. 导入common和abilityAccessCtrl模块,用于获取权限申请的能力。 68 69 ```ts 70 import { common, abilityAccessCtrl } from '@kit.AbilityKit'; 71 ``` 72 733. 分布式数据同步权限的授权方式为user_grant,因此需要调用requestPermissionsFromUser接口,以动态弹窗的方式向用户申请授权。 74 75 ```ts 76 let context = getContext(this) as common.UIAbilityContext; 77 let atManager = abilityAccessCtrl.createAtManager(); 78 try { 79 atManager.requestPermissionsFromUser(context, ['ohos.permission.DISTRIBUTED_DATASYNC']).then((data) => { 80 console.log('data: ' + JSON.stringify(data)); 81 }).catch((err: object) => { 82 console.log('err: ' + JSON.stringify(err)); 83 }) 84 } catch (err) { 85 console.log('catch err->' + JSON.stringify(err)); 86 } 87 ``` 88 89## 设备发现开发指导 90 91### 场景概述 92 93开发者可以调用DeviceManager设备发现相关接口,获取周边可用的设备。 94 95### 接口说明 96 97startDiscovering(discoverParam: {[key: string]: Object;} , filterOptions?: {[key: string]: Object;} ): void; 98 99发现周边同局域网或者开启蓝牙的设备。详细信息参见:[startDiscovering](../reference/apis-distributedservice-kit/js-apis-distributedDeviceManager.md#startdiscovering)。 100 101 102### 开发步骤 103 1041. 申请分布式数据同步权限。 105 1062. 导入distributedDeviceManager模块,所有与设备管理相关的功能API,都是通过该模块提供的。 107 108 ```ts 109 import { distributedDeviceManager } from '@kit.DistributedServiceKit'; 110 ``` 111 1123. 导入BusinessError模块,用于获取distributedDeviceManager模块相关接口抛出的错误码。 113 114 ```ts 115 import { BusinessError } from '@kit.BasicServicesKit'; 116 ``` 117 1184. 创建设备管理实例,设备管理实例是分布式设备管理方法的调用入口,并注册发现设备的回调。 119 120 ```ts 121 try { 122 let dmInstance = distributedDeviceManager.createDeviceManager('ohos.samples.jsHelloWorld'); 123 dmInstance.on('discoverSuccess', data => console.log('discoverSuccess on:' + JSON.stringify(data))); 124 dmInstance.on('discoverFailure', data => console.log('discoverFailure on:' + JSON.stringify(data))); 125 } catch(err) { 126 let e: BusinessError = err as BusinessError; 127 console.error('createDeviceManager errCode:' + e.code + ',errMessage:' + e.message); 128 } 129 ``` 130 1315. 发现周边设备。发现状态持续两分钟,超过两分钟,会停止发现,最大发现数量99个。 132 133 ```ts 134 interface DiscoverParam { 135 discoverTargetType: number; 136 } 137 interface FilterOptions { 138 availableStatus: number; 139 discoverDistance: number; 140 authenticationStatus: number; 141 authorizationType: number; 142 } 143 let discoverParam: Record<string, number> = { 144 'discoverTargetType': 1 145 }; 146 let filterOptions: Record<string, number> = { 147 'availableStatus': 0 148 }; 149 try { 150 dmInstance.startDiscovering(discoverParam, filterOptions); 151 } catch (err) { 152 let e: BusinessError = err as BusinessError; 153 console.error('startDiscovering errCode:' + e.code + ',errMessage:' + e.message); 154 } 155 ``` 156 157## 设备绑定开发指导 158 159### 场景概述 160 161开发者发现周边不可信设备后,通过绑定接口建立可信关系。 162 163### 接口说明 164 165bindTarget(deviceId: string, bindParam: {[key: string]: Object;} , callback: AsyncCallback<{deviceId: string;}>): void; 166 167设备绑定。详细信息参见:[bindTarget](../reference/apis-distributedservice-kit/js-apis-distributedDeviceManager.md#bindtarget)。 168 169### 开发步骤 170 1711. 申请分布式数据同步权限。 172 1732. 发现周边不可信设备。 174 1753. 选择不可信设备id,发起设备绑定。 176 177 ```ts 178 class Data { 179 deviceId: string = ''; 180 } 181 let deviceId = 'XXXXXXXX'; 182 let bindParam: Record<string, string | number> = { 183 'bindType': 1, 184 'targetPkgName': 'xxxx', 185 'appName': 'xxxx', 186 'appOperation': 'xxxx', 187 'customDescription': 'xxxx' 188 }; 189 try { 190 dmInstance.bindTarget(deviceId, bindParam, (err: BusinessError, data: Data) => { 191 if (err) { 192 console.error('bindTarget errCode:' + err.code + ',errMessage:' + err.message); 193 return; 194 } 195 console.info('bindTarget result:' + JSON.stringify(data)); 196 }); 197 } catch (err) { 198 let e: BusinessError = err as BusinessError; 199 console.error('bindTarget errCode:' + e.code + ',errMessage:' + e.message); 200 } 201 ``` 202 203## 设备信息查询开发指导 204 205### 场景概述 206 207设备与周边设备建立可信关系后,通过设备信息查询接口可以获取所有上线并且可信的设备。 208 209### 接口说明 210 211getAvailableDeviceListSync(): Array<DeviceBasicInfo>; 212 213设备信息查询。详细信息参见:[getAvailableDeviceListSync](../reference/apis-distributedservice-kit/js-apis-distributedDeviceManager.md#getavailabledevicelistsync)。 214 215### 开发步骤 216 2171. 申请分布式数据同步权限。 218 2192. 发现周边不可信设备。 220 2213. 建立设备间的可信关系。 222 2234. 查询周围上线并且可信的设备。 224 225 ```ts 226 try { 227 let deviceInfoList: Array<distributedDeviceManager.DeviceBasicInfo> = dmInstance.getAvailableDeviceListSync(); 228 } catch (err) { 229 let e: BusinessError = err as BusinessError; 230 console.error('getAvailableDeviceListSync errCode:' + e.code + ',errMessage:' + e.message); 231 } 232 ``` 233 234## 设备上下线监听开发指导 235 236### 场景概述 237 238周边可信设备可用后会给业务报上线通知,当设备不可用时会给业务报下线通知。 239 240### 接口说明 241 242on(type: 'deviceStateChange', callback: Callback<{ action: DeviceStateChange; device: DeviceBasicInfo; }>): void; 243 244设备上下线监听。详细信息参见:[on('deviceStateChange')](../reference/apis-distributedservice-kit/js-apis-distributedDeviceManager.md#ondevicestatechange)。 245 246### 开发步骤 247 2481. 申请分布式数据同步权限。 249 2502. 导入distributedDeviceManager模块,所有与设备管理相关的功能API,都是通过该模块提供的。 251 252 ```ts 253 import { distributedDeviceManager } from '@kit.DistributedServiceKit'; 254 ``` 255 2563. 导入BusinessError模块,用于获取distributedDeviceManager模块相关接口抛出的错误码。 257 258 ```ts 259 import { BusinessError } from '@kit.BasicServicesKit'; 260 ``` 261 2624. 创建设备管理实例,设备管理实例是分布式设备管理方法的调用入口,并注册设备上下线回调。 263 264 ```ts 265 try { 266 let dmInstance = distributedDeviceManager.createDeviceManager('ohos.samples.jsHelloWorld'); 267 dmInstance.on('deviceStateChange', data => console.log('deviceStateChange on:' + JSON.stringify(data))); 268 } catch(err) { 269 let e: BusinessError = err as BusinessError; 270 console.error('createDeviceManager errCode:' + e.code + ',errMessage:' + e.message); 271 } 272 ``` 273