• Home
Name Date Size #Lines LOC

..--

common/include/12-May-2024-1,223755

display/12-May-2024-1,284723

figures/12-May-2024-

interfaces/12-May-2024-4,8843,839

sa_profile/12-May-2024-4928

services/devicemanagerservice/12-May-2024-6,3184,943

test/12-May-2024-368276

utils/12-May-2024-889655

BUILD.gnD12-May-2024900 2422

LICENSED12-May-202410.1 KiB179150

OAT.xmlD12-May-20244 KiB6711

README_zh.mdD12-May-202411.8 KiB244196

bundle.jsonD12-May-20242.8 KiB7373

devicemanager.gniD12-May-2024864 2317

ohos.buildD12-May-20241.6 KiB3635

README_zh.md

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
111| 原型                                                                                                                          | 描述       |
112| -------                                                                                                                                   | ---------- |
113| getTrustedDeviceListSync(): Array<DeviceInfo>;                                                                                            | 获取信任设备列表 |
114| on(type: 'deviceStateChange', callback: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void;                         | 设备状态变更回调 |
115| off(type: 'deviceStateChange', callback?: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void;                       | 取消设备状态变更回调 |
116| on(type: 'serviceDie', callback: () => void): void;                                                                                       | 服务错误回调 |
117| off(type: 'serviceDie', callback?: () => void): void;                                                                                     | 取消服务错误回调 |
118
119
120
121- 系统能力接口:
122
123  提供周边设备发现、设备认证等相关接口,该部分作为系统能力接口,仅供系统应用调用。
124
125  开始设备发现、停止发现设备接口要配对使用,使用同一个subscribeId。
126
127| 原型                                                         | 描述                 |
128| ------------------------------------------------------------ | -------------------- |
129| startDeviceDiscovery(subscribeInfo: SubscribeInfo): void;    | 开始设备发现         |
130| stopDeviceDiscovery(subscribeId: number): void;              | 停止发现设备         |
131| authenticateDevice(deviceInfo: DeviceInfo, authparam: AuthParam, callback: AsyncCallback<{deviceId: string, pinTone ?: number}>): void; | 设备认证接口         |
132| verifyAuthInfo(authInfo: AuthInfo, callback: AsyncCallback<{deviceId: string, level: number}>): void; | 设备认证信息校验     |
133| on(type: 'deviceFound', callback: Callback<{ subscribeId: number, device: DeviceInfo }>): void; | 发现设备列表回调     |
134| off(type: 'deviceFound', callback?: Callback<{ subscribeId: number, device: DeviceInfo }>): void; | 取消发现设备列表回调 |
135| on(type: 'discoverFail', callback: Callback<{ subscribeId: number, reason: number }>): void; | 发现设备失败回调     |
136| off(type: 'discoverFail', callback?: Callback<{ subscribeId: number, reason: number }>): void; | 取消发现设备失败回调 |
137
138## 示例如下:
139
140```
141// 创建DeviceManager实例:
142deviceManager.createDeviceManager('com.ohos.xxxx', (err, dm) => {
143    this.log("createDeviceManager err:" + JSON.stringify(err) + '  --success:' + JSON.stringify(dm))
144    if (err) return;
145    dmClass = dm;
146    dmClass.on('serviceDie', data => this.log("serviceDie on:" + JSON.stringify(data)))
147});
148
149// 注册/去注册设备上下线监听
150dmClass.on('deviceStateChange', data => this.log("deviceStateChange on:" + JSON.stringify(data)))
151dmClass.off('deviceStateChange')
152
153// 查询可信设备列表
154var array = dmClass.getTrustedDeviceListSync();
155
156// 开始设备发现(发现周边不可信设备)
157var subscribeId = 0;
158dmClass.on('deviceFound', (data) => {
159    if (data == null) {
160        this.log("deviceFound error data=null")
161        return;
162    }
163    this.logList.push("deviceFound:" + JSON.stringify(data));
164});
165dmClass.on('discoverFail', (data) => {
166    this.log("discoverFail on:" + JSON.stringify(data));
167});
168subscribeId = Math.floor(Math.random() * 10000 + 1000)
169var info = {
170    "subscribeId": subscribeId,
171    "mode": 0xAA,
172    "medium": 0,
173    "freq": 2,
174    "isSameAccount": false,
175    "isWakeRemote": true,
176    "capability": 0
177};
178dmClass.startDeviceDiscovery(info);
179
180// 停止设备发现(需要和startDeviceDiscovery接口配对使用)
181dmClass.stopDeviceDiscovery(subscribeId);
182
183// 设备认证
184var deviceInfo ={
185    "deviceId": "XXXXXXXX",
186    "deviceName": "",
187    deviceType: 0
188};
189let extraInfo = {
190    "targetPkgName": 'xxxxxxxx', // FA流转目标设备包名
191    "appName": "xxxxxxxx", // 对端设备应用名称
192    "appDescription": "xxxxxxxx", // app描述
193    "business": '0',
194    "displayOwner": 0
195}
196let authParam = {
197    "authType": 1,
198    "appIcon": new Uint8Array(), // app图标,可选参数,可不填
199    "appThumbnail": new Uint8Array(), // app缩略图,可选参数,可不填
200    "extraInfo": extraInfo
201}
202dmClass.authenticateDevice(this.deviceInfo, authParam, (err, data) => {
203    if (err) {
204        this.logList.push("authenticateDevice err:" + JSON.stringify(err));
205        console.info(TAG + "authenticateDevice err:" + JSON.stringify(err));
206        return;
207    }
208    this.logList.push("authenticateDevice result:" + JSON.stringify(data));
209    console.info(TAG + "authenticateDevice result:" + JSON.stringify(data));
210    token = data.pinToken;
211});
212```
213## 系统弹框FA
214
215当前版本只支持PIN码认证,需要提供PIN码认证的授权提示界面、PIN码显示界面、PIN码输入界面;
216
217当前,由于系统通过native层直接进行弹窗的能力尚不具备,这里使用一个临时的FA来进行对应界面的弹窗。
218
219该FA为:DeviceManager_UI.hap,作为系统应用进行预置。
220
221- 编译运行:
222
223devicemanager/display工程导入DevEco Studio 2.2 Beta1,复制display目录下的@ohos.distributedHardware.deviceManager.d.ts文件到Sdk\js\2.2.0.1\api\common目录下,进行编译构建及运行调试.
224
225  DevEco Studio使用方法请参考[DevEco Studio使用说明](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387)226
227- 编译环境依赖:IDE 2.2 SDK6
228
229- DeviceManager_UI.hap存放位置:[applications_hap仓库](https://gitee.com/openharmony/applications_hap)
230
231- UI显示:
232
233  DeviceManager作为认证被控端,授权提示界面、PIN码显示界面由DeviceManager_UI FA默认进行显示;
234
235  DeviceManager作为认证发起端,PIN码输入界面可以选择由DeviceManager_UI FA进行显示,还是由开发者自行显示。开发者如需自己定制PIN码输入界面,需要在authenticateDevice接口的认证参数AuthParam中,extraInfo属性里面指定displayOwner参数为1(DISPLAY_OWNER_OTHER)。
236
237### 相关仓
238****
239
240[**interface_sdk-js**](https://gitee.com/openharmony/interface_sdk-js/)
241[**applications_hap**](https://gitee.com/openharmony/applications_hap)
242**device_manager**
243
244