• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# **DeviceManager组件**
2
3## 简介
4
5DeviceManager组件在OpenHarmony上提供账号无关的分布式设备的认证组网能力,并为开发者提供了一套用于分布式设备间监听、发现和认证的接口。
6
7其组成及依赖如下所示:
8
9![](figures/devicemanager_zh.png)
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
218devicemanager/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**