1# @ohos.driver.deviceManager (外设管理)
2
3本模块主要提供管理外部设备的相关功能,包括查询设备列表、绑定设备和解除绑定设备。
4
5>  **说明:**
6>
7> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9## 导入模块
10
11```ts
12import { deviceManager } from '@kit.DriverDevelopmentKit';
13```
14
15## deviceManager.queryDevices
16
17queryDevices(busType?: number): Array<Readonly<Device>>
18
19获取接入主设备的外部设备列表。如果没有设备接入,那么将会返回一个空的列表。
20
21**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
22
23**系统能力:** SystemCapability.Driver.ExternalDevice
24
25**参数:**
26
27| 参数名  | 类型   | 必填 | 说明                                 |
28| ------- | ------ | ---- | ------------------------------------ |
29| busType | number | 否   | 设备总线类型,不填则查找所有类型设备。 |
30
31**返回值:**
32
33| 类型                                           | 说明           |
34| ---------------------------------------------- | -------------- |
35| Array<Readonly<[Device](#device)>> | 设备信息列表。 |
36
37**错误码:**
38
39| 错误码ID | 错误信息                                 |
40| -------- | ---------------------------------------- |
41| 201      | The permission check failed.             |
42| 401      | The parameter check failed.              |
43| 22900001 | ExternalDeviceManager service exception. |
44
45**示例:**
46
47```ts
48import { deviceManager } from '@kit.DriverDevelopmentKit';
49
50try {
51  let devices : Array<deviceManager.Device> = deviceManager.queryDevices(deviceManager.BusType.USB);
52  for (let item of devices) {
53    let device : deviceManager.USBDevice = item as deviceManager.USBDevice;
54    console.info(`Device id is ${device.deviceId}`)
55  }
56} catch (error) {
57  console.error(`Failed to query device. Code is ${error.code}, message is ${error.message}`);
58}
59```
60
61## deviceManager.bindDevice
62
63bindDevice(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;,
64  callback: AsyncCallback&lt;{deviceId: number; remote: rpc.IRemoteObject;}&gt;): void;
65
66根据queryDevices()返回的设备信息绑定设备。
67
68需要调用[deviceManager.queryDevices()](#devicemanagerquerydevices)获取设备信息以及device。
69
70**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
71
72**系统能力:** SystemCapability.Driver.ExternalDevice
73
74**参数:**
75
76| 参数名       | 类型                                                                                                 | 必填 | 说明                                   |
77| ------------ | ---------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
78| deviceId     | number                                                                                               | 是   | 设备ID,通过queryDevices获得。           |
79| onDisconnect | AsyncCallback&lt;number&gt;                                                                          | 是   | 绑定设备断开的回调。                     |
80| callback     | AsyncCallback&lt;{deviceId: number; remote: [rpc.IRemoteObject](../apis-ipc-kit/js-apis-rpc.md#iremoteobject);}&gt; | 是   | 绑定设备的回调,返回绑定设备的通信对象。 |
81
82**错误码:**
83
84| 错误码ID | 错误信息                                 |
85| -------- | ---------------------------------------- |
86| 201      | The permission check failed.              |
87| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
88| 22900001 | ExternalDeviceManager service exception. |
89
90**示例:**
91
92```ts
93import { deviceManager } from '@kit.DriverDevelopmentKit';
94import { BusinessError } from '@kit.BasicServicesKit';
95import { rpc } from '@kit.IPCKit';
96
97interface DataType {
98  deviceId : number;
99  remote : rpc.IRemoteObject;
100}
101
102try {
103  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
104  deviceManager.bindDevice(12345678, (error : BusinessError, data : number) => {
105    console.error(`Device is disconnected`);
106  }, (error : BusinessError, data : DataType) => {
107    if (error) {
108      console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
109      return;
110    }
111    console.info(`bindDevice success`);
112  });
113} catch (error) {
114  console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
115}
116```
117
118## deviceManager.bindDeviceDriver<sup>11+</sup>
119bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;,
120  callback: AsyncCallback&lt;RemoteDeviceDriver&gt;): void;
121
122根据queryDevices()返回的设备信息绑定设备。
123
124需要调用[deviceManager.queryDevices()](#devicemanagerquerydevices)获取设备信息以及device。
125
126**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
127
128**系统能力:** SystemCapability.Driver.ExternalDevice
129
130**参数:**
131
132| 参数名       | 类型                        | 必填 | 说明                         |
133| ------------ | --------------------------- | ---- | ---------------------------- |
134| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
135| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
136| callback     | AsyncCallback&lt;RemoteDeviceDriver&gt;| 是 | 指示绑定结果,包括设备 ID 和远程对象。 |
137
138**错误码:**
139
140| 错误码ID | 错误信息                                 |
141| -------- | ---------------------------------------- |
142| 201      | The permission check failed.             |
143| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
144| 22900001 | ExternalDeviceManager service exception. |
145
146**示例:**
147
148```ts
149import { deviceManager } from '@kit.DriverDevelopmentKit';
150import { BusinessError } from '@kit.BasicServicesKit';
151import { rpc } from '@kit.IPCKit';
152
153try {
154  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
155  deviceManager.bindDeviceDriver(12345678, (error : BusinessError, data : number) => {
156    console.error(`Device is disconnected`);
157  }, (error : BusinessError, data : deviceManager.RemoteDeviceDriver) => {
158    if (error) {
159      console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
160      return;
161    }
162    console.info(`bindDeviceDriver success`);
163  });
164} catch (error) {
165  console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
166}
167```
168
169## deviceManager.bindDevice
170
171bindDevice(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;): Promise&lt;{deviceId: number;
172  remote: rpc.IRemoteObject;}&gt;;
173
174根据queryDevices()返回的设备信息绑定设备。
175
176需要调用[deviceManager.queryDevices](#devicemanagerquerydevices)获取设备信息以及device。
177
178**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
179
180**系统能力:** SystemCapability.Driver.ExternalDevice
181
182**参数:**
183
184| 参数名       | 类型                        | 必填 | 说明                         |
185| ------------ | --------------------------- | ---- | ---------------------------- |
186| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
187| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
188
189**返回值:**
190
191| 类型                                                                                           | 说明                                         |
192| ---------------------------------------------------------------------------------------------- | -------------------------------------------- |
193| Promise&lt;{deviceId: number; remote: [rpc.IRemoteObject](../apis-ipc-kit/js-apis-rpc.md#iremoteobject);}&gt; | Promise对象,返回设备ID和IRemoteObject对象。 |
194
195**错误码:**
196
197| 错误码ID | 错误信息                                 |
198| -------- | ---------------------------------------- |
199| 201      | The permission check failed.             |
200| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
201| 22900001 | ExternalDeviceManager service exception. |
202
203**示例:**
204
205```ts
206import { deviceManager } from '@kit.DriverDevelopmentKit';
207import { BusinessError } from '@kit.BasicServicesKit';
208
209try {
210  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
211  deviceManager.bindDevice(12345678, (error : BusinessError, data : number) => {
212    console.error(`Device is disconnected`);
213  }).then(data => {
214    console.info(`bindDevice success, Device_Id is ${data.deviceId}.
215    remote is ${data.remote != null ? data.remote.getDescriptor() : "null"}`);
216  }, (error: BusinessError) => {
217    console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
218  });
219} catch (error) {
220  console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
221}
222```
223## deviceManager.bindDeviceDriver<sup>11+</sup>
224
225bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;): Promise&lt;RemoteDeviceDriver&gt;;
226
227根据queryDevices()返回的设备信息绑定设备。
228
229需要调用[deviceManager.queryDevices](#devicemanagerquerydevices)获取设备信息以及device。
230
231**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
232
233**系统能力:** SystemCapability.Driver.ExternalDevice
234
235**参数:**
236
237| 参数名       | 类型                        | 必填 | 说明                         |
238| ------------ | --------------------------- | ---- | ---------------------------- |
239| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
240| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
241
242**返回值:**
243
244| 类型                              | 说明                                      |
245| --------------------------------- | -----------------------------------------|
246| Promise&lt;RemoteDeviceDriver&gt; | Promise对象,返回RemoteDeviceDriver对象。 |
247
248**错误码:**
249
250| 错误码ID | 错误信息                                 |
251| -------- | ---------------------------------------- |
252| 201      | The permission check failed.             |
253| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
254| 22900001 | ExternalDeviceManager service exception. |
255
256**示例:**
257
258```ts
259import { deviceManager } from '@kit.DriverDevelopmentKit';
260import { BusinessError } from '@kit.BasicServicesKit';
261
262try {
263  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
264  deviceManager.bindDeviceDriver(12345678, (error : BusinessError, data : number) => {
265    console.error(`Device is disconnected`);
266  }).then((data: deviceManager.RemoteDeviceDriver) => {
267    console.info(`bindDeviceDriver success, Device_Id is ${data.deviceId}.
268    remote is ${data.remote != null ? data.remote.getDescriptor() : "null"}`);
269  }, (error: BusinessError) => {
270    console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
271  });
272} catch (error) {
273  console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
274}
275```
276
277## deviceManager.unbindDevice
278
279unbindDevice(deviceId: number, callback: AsyncCallback&lt;number&gt;): void
280
281解除设备绑定。
282
283**需要权限**:ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
284
285**系统能力:**  SystemCapability.Driver.ExternalDevice
286
287**参数:**
288
289| 参数名   | 类型                        | 必填 | 说明                           |
290| -------- | --------------------------- | ---- | ------------------------------ |
291| deviceId | number                      | 是   | 设备ID,通过queryDevices获得。 |
292| callback | AsyncCallback&lt;number&gt; | 是   | 解绑完成的回调。               |
293
294**错误码:**
295
296| 错误码ID | 错误信息                                 |
297| -------- | ---------------------------------------- |
298| 201      | The permission check failed.             |
299| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
300| 22900001 | ExternalDeviceManager service exception. |
301
302**示例:**
303
304```ts
305import { deviceManager } from '@kit.DriverDevelopmentKit';
306
307try {
308  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
309  deviceManager.unbindDevice(12345678, (error : BusinessError, data : number) => {
310    if (error) {
311      console.error(`unbindDevice async fail. Code is ${error.code}, message is ${error.message}`);
312      return;
313    }
314    console.info(`unbindDevice success`);
315  });
316} catch (error) {
317  console.error(`unbindDevice fail. Code is ${error.code}, message is ${error.message}`);
318}
319```
320## deviceManager.unbindDevice
321
322unbindDevice(deviceId: number): Promise&lt;number&gt;
323
324解除设备绑定。
325
326**需要权限**:ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
327
328**系统能力:**  SystemCapability.Driver.ExternalDevice
329
330**参数:**
331
332| 参数名   | 类型   | 必填 | 说明                           |
333| -------- | ------ | ---- | ------------------------------ |
334| deviceId | number | 是   | 设备ID,通过queryDevices获得。 |
335
336**错误码:**
337
338| 错误码ID | 错误信息                                 |
339| -------- | ---------------------------------------- |
340| 201      | The permission check failed.             |
341| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
342| 22900001 | ExternalDeviceManager service exception. |
343
344**返回值:**
345
346| 类型                  | 说明                      |
347| --------------------- | ------------------------- |
348| Promise&lt;number&gt; | Promise对象,返回设备ID。 |
349
350**示例:**
351
352```ts
353import { deviceManager } from '@kit.DriverDevelopmentKit';
354import { BusinessError } from '@kit.BasicServicesKit';
355
356try {
357  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
358  deviceManager.unbindDevice(12345678).then((data : number) => {
359    console.info(`unbindDevice success, Device_Id is ${data}.`);
360  }, (error : BusinessError) => {
361    console.error(`unbindDevice async fail. Code is ${error.code}, message is ${error.message}`);
362  });
363} catch (error) {
364  console.error(`unbindDevice fail. Code is ${error.code}, message is ${error.message}`);
365}
366```
367
368## Device
369
370外设信息。
371
372**系统能力:** SystemCapability.Driver.ExternalDevice
373
374| 名称        | 类型                | 必填 | 说明       |
375| ----------- | ------------------- | ---- | ---------- |
376| busType     | [BusType](#bustype) | 是   | 总线类型。 |
377| deviceId    | number              | 是   | 设备ID。   |
378| description | string              | 是   | 设备描述。 |
379
380## USBDevice
381
382USB设备信息,继承自[Device](#device)。
383
384**系统能力:** SystemCapability.Driver.ExternalDevice
385
386| 名称      | 类型   | 必填 | 说明                |
387| --------- | ------ | ---- | ------------------- |
388| vendorId  | number | 是   | USB设备Vendor ID。  |
389| productId | number | 是   | USB设备Product ID。 |
390
391## BusType
392
393设备总线类型。
394
395**系统能力:** SystemCapability.Driver.ExternalDevice
396
397| 名称 | 值  | 说明          |
398| ---- | --- | ------------- |
399| USB  | 1   | USB总线类型。 |
400
401## RemoteDeviceDriver<sup>11+</sup>
402
403远程设备驱动。
404
405**系统能力:** SystemCapability.Driver.ExternalDevice
406
407| 名称      | 类型   | 必填 | 说明                |
408| --------- | ------ | ---- | ------------------- |
409| deviceId<sup>11+</sup>  | number | 是   | 设备ID。  |
410| remote<sup>11+</sup> | [rpc.IRemoteObject](../apis-ipc-kit/js-apis-rpc.md#iremoteobject) | 是   | 远程驱动程序对象。 |