• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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| 22900001 | ExternalDeviceManager service exception or busType parameter error. |
43
44**示例:**
45
46```ts
47import { deviceManager } from '@kit.DriverDevelopmentKit';
48
49try {
50  let devices : Array<deviceManager.Device> = deviceManager.queryDevices(deviceManager.BusType.USB);
51  for (let item of devices) {
52    let device : deviceManager.USBDevice = item as deviceManager.USBDevice;
53    console.info(`Device id is ${device.deviceId}`)
54  }
55} catch (error) {
56  console.error(`Failed to query device. Code is ${error.code}, message is ${error.message}`);
57}
58```
59
60## deviceManager.bindDevice
61
62bindDevice(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;,
63  callback: AsyncCallback&lt;{deviceId: number; remote: rpc.IRemoteObject;}&gt;): void
64
65根据queryDevices()返回的设备信息绑定设备。
66
67需要调用[deviceManager.queryDevices()](#devicemanagerquerydevices)获取设备信息以及device。
68
69**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
70
71**系统能力:** SystemCapability.Driver.ExternalDevice
72
73**参数:**
74
75| 参数名       | 类型                                                                                                 | 必填 | 说明                                   |
76| ------------ | ---------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
77| deviceId     | number                                                                                               | 是   | 设备ID,通过queryDevices获得。           |
78| onDisconnect | AsyncCallback&lt;number&gt;                                                                          | 是   | 绑定设备断开的回调。                     |
79| callback     | AsyncCallback&lt;{deviceId: number; remote: [rpc.IRemoteObject](../apis-ipc-kit/js-apis-rpc.md#iremoteobject);}&gt; | 是   | 绑定设备的回调,返回绑定设备的通信对象。 |
80
81**错误码:**
82
83| 错误码ID | 错误信息                                 |
84| -------- | ---------------------------------------- |
85| 201      | The permission check failed.              |
86| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
87| 22900001 | ExternalDeviceManager service exception. |
88
89**示例:**
90
91```ts
92import { deviceManager } from '@kit.DriverDevelopmentKit';
93import { BusinessError } from '@kit.BasicServicesKit';
94import { rpc } from '@kit.IPCKit';
95
96interface DataType {
97  deviceId : number;
98  remote : rpc.IRemoteObject;
99}
100
101try {
102  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
103  deviceManager.bindDevice(12345678, (error : BusinessError, data : number) => {
104    console.error(`Device is disconnected`);
105  }, (error : BusinessError, data : DataType) => {
106    if (error) {
107      console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
108      return;
109    }
110    console.info(`bindDevice success`);
111  });
112} catch (error) {
113  console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
114}
115```
116
117## deviceManager.bindDeviceDriver<sup>11+</sup>
118bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;,
119  callback: AsyncCallback&lt;RemoteDeviceDriver&gt;): void
120
121根据queryDevices()返回的设备信息绑定设备。
122
123需要调用[deviceManager.queryDevices()](#devicemanagerquerydevices)获取设备信息以及device。
124
125**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
126
127**系统能力:** SystemCapability.Driver.ExternalDevice
128
129**参数:**
130
131| 参数名       | 类型                        | 必填 | 说明                         |
132| ------------ | --------------------------- | ---- | ---------------------------- |
133| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
134| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
135| callback     | AsyncCallback&lt;RemoteDeviceDriver&gt;| 是 | 指示绑定结果,包括设备 ID 和远程对象。 |
136
137**错误码:**
138
139| 错误码ID | 错误信息                                 |
140| -------- | ---------------------------------------- |
141| 201      | The permission check failed.             |
142| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
143| 22900001 | ExternalDeviceManager service exception. |
144
145**示例:**
146
147```ts
148import { deviceManager } from '@kit.DriverDevelopmentKit';
149import { BusinessError } from '@kit.BasicServicesKit';
150import { rpc } from '@kit.IPCKit';
151
152try {
153  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
154  deviceManager.bindDeviceDriver(12345678, (error : BusinessError, data : number) => {
155    console.error(`Device is disconnected`);
156  }, (error : BusinessError, data : deviceManager.RemoteDeviceDriver) => {
157    if (error) {
158      console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
159      return;
160    }
161    console.info(`bindDeviceDriver success`);
162  });
163} catch (error) {
164  console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
165}
166```
167
168## deviceManager.bindDevice
169
170bindDevice(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;): Promise&lt;{deviceId: number;
171  remote: rpc.IRemoteObject;}&gt;;
172
173根据queryDevices()返回的设备信息绑定设备。
174
175需要调用[deviceManager.queryDevices](#devicemanagerquerydevices)获取设备信息以及device。
176
177**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
178
179**系统能力:** SystemCapability.Driver.ExternalDevice
180
181**参数:**
182
183| 参数名       | 类型                        | 必填 | 说明                         |
184| ------------ | --------------------------- | ---- | ---------------------------- |
185| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
186| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
187
188**返回值:**
189
190| 类型                                                                                           | 说明                                         |
191| ---------------------------------------------------------------------------------------------- | -------------------------------------------- |
192| Promise&lt;{deviceId: number; remote: [rpc.IRemoteObject](../apis-ipc-kit/js-apis-rpc.md#iremoteobject);}&gt; | Promise对象,返回设备ID和IRemoteObject对象。 |
193
194**错误码:**
195
196| 错误码ID | 错误信息                                 |
197| -------- | ---------------------------------------- |
198| 201      | The permission check failed.             |
199| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
200| 22900001 | ExternalDeviceManager service exception. |
201
202**示例:**
203
204```ts
205import { deviceManager } from '@kit.DriverDevelopmentKit';
206import { BusinessError } from '@kit.BasicServicesKit';
207
208try {
209  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
210  deviceManager.bindDevice(12345678, (error : BusinessError, data : number) => {
211    console.error(`Device is disconnected`);
212  }).then(data => {
213    console.info(`bindDevice success, Device_Id is ${data.deviceId}.
214    remote is ${data.remote != null ? data.remote.getDescriptor() : "null"}`);
215  }, (error: BusinessError) => {
216    console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
217  });
218} catch (error) {
219  console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
220}
221```
222## deviceManager.bindDeviceDriver<sup>11+</sup>
223
224bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback&lt;number&gt;): Promise&lt;RemoteDeviceDriver&gt;;
225
226根据queryDevices()返回的设备信息绑定设备。
227
228需要调用[deviceManager.queryDevices](#devicemanagerquerydevices)获取设备信息以及device。
229
230**需要权限:** ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
231
232**系统能力:** SystemCapability.Driver.ExternalDevice
233
234**参数:**
235
236| 参数名       | 类型                        | 必填 | 说明                         |
237| ------------ | --------------------------- | ---- | ---------------------------- |
238| deviceId     | number                      | 是   | 设备ID,通过queryDevices获得。 |
239| onDisconnect | AsyncCallback&lt;number&gt; | 是   | 绑定设备断开的回调。           |
240
241**返回值:**
242
243| 类型                              | 说明                                      |
244| --------------------------------- | -----------------------------------------|
245| Promise&lt;RemoteDeviceDriver&gt; | Promise对象,返回RemoteDeviceDriver对象。 |
246
247**错误码:**
248
249| 错误码ID | 错误信息                                 |
250| -------- | ---------------------------------------- |
251| 201      | The permission check failed.             |
252| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
253| 22900001 | ExternalDeviceManager service exception. |
254
255**示例:**
256
257```ts
258import { deviceManager } from '@kit.DriverDevelopmentKit';
259import { BusinessError } from '@kit.BasicServicesKit';
260
261try {
262  // 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
263  deviceManager.bindDeviceDriver(12345678, (error : BusinessError, data : number) => {
264    console.error(`Device is disconnected`);
265  }).then((data: deviceManager.RemoteDeviceDriver) => {
266    console.info(`bindDeviceDriver success, Device_Id is ${data.deviceId}.
267    remote is ${data.remote != null ? data.remote.getDescriptor() : "null"}`);
268  }, (error: BusinessError) => {
269    console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
270  });
271} catch (error) {
272  console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
273}
274```
275
276## deviceManager.unbindDevice
277
278unbindDevice(deviceId: number, callback: AsyncCallback&lt;number&gt;): void
279
280解除设备绑定。
281
282**需要权限**:ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
283
284**系统能力:**  SystemCapability.Driver.ExternalDevice
285
286**参数:**
287
288| 参数名   | 类型                        | 必填 | 说明                           |
289| -------- | --------------------------- | ---- | ------------------------------ |
290| deviceId | number                      | 是   | 设备ID,通过queryDevices获得。 |
291| callback | AsyncCallback&lt;number&gt; | 是   | 解绑完成的回调。               |
292
293**错误码:**
294
295| 错误码ID | 错误信息                                 |
296| -------- | ---------------------------------------- |
297| 201      | The permission check failed.             |
298| 401      | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
299| 22900001 | ExternalDeviceManager service exception. |
300
301**示例:**
302
303```ts
304import { deviceManager } from '@kit.DriverDevelopmentKit';
305import { BusinessError } from '@kit.BasicServicesKit';
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) | 是   | 远程驱动程序对象。 |