本模块是驱动开发套件提供的设备管理接口集合,提供外接设备信息的查询能力、应用与外设驱动之间的绑定与解绑能力。本模块的接口可用于实现以下功能:
本模块的外设访问能力需要多个 API 组合完成,典型调用流程为:查询设备 → 绑定设备获取通信对象 → 通过通信对象与驱动交互 → 解绑设备释放资源。设备绑定的生命周期视图如下:

本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。调用本模块接口需要申请权限 ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER(查询/绑定/解绑)或 ohos.permission.ACCESS_DDK_DRIVERS(新版本的绑定/解绑接口)。
queryDevices(busType?: number): Array<Readonly<Device>>
获取接入主设备的外部设备列表。如果没有设备接入,那么将会返回一个空的列表。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| busType | number | 否 | 由BusType约定的设备总线类型,不填则查找所有类型设备。 |
返回值:
| 类型 | 说明 |
|---|---|
| Array<Readonly<Device>> | 设备信息列表。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 22900001 | ExternalDeviceManager service exception or busType parameter error. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
try {
let devices: Array<deviceManager.Device> = deviceManager.queryDevices(deviceManager.BusType.USB);
for (let item of devices) {
let device: deviceManager.USBDevice = item as deviceManager.USBDevice;
console.info(`Device id is ${device.deviceId}`);
}
} catch (error) {
console.error(`Failed to query device. Code is ${error.code}, message is ${error.message}`);
} bindDriverWithDeviceId(deviceId: number, onDisconnect: AsyncCallback<number>): Promise<RemoteDeviceDriver>
根据queryDevices()返回的设备信息绑定设备,必须与unbindDriverWithDeviceId接口成对使用。使用Promise异步回调。
需要调用deviceManager.queryDevices获取设备信息列表。
需要权限: ohos.permission.ACCESS_DDK_DRIVERS
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| onDisconnect | AsyncCallback<number> | 是 | 回调函数。当绑定设备断开时,err为undefined,data为解绑的设备ID;否则为错误对象。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<RemoteDeviceDriver> | Promise对象,返回RemoteDeviceDriver对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 26300001 | ExternalDeviceManager service exception. |
| 26300002 | The driver service does not allow any client to bind. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDriverWithDeviceId(12345678, (error: BusinessError, data: number) => {
console.error(`Device is disconnected`);
}).then((data: deviceManager.RemoteDeviceDriver) => {
console.info(`bindDriverWithDeviceId success, Device_Id is ${data.deviceId}.
remote is ${data.remote != null ? data.remote.getDescriptor(): "null"}`);
}, (error: BusinessError) => {
console.error(`bindDriverWithDeviceId async fail. Code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
console.error(`bindDriverWithDeviceId fail. Code is ${error.code}, message is ${error.message}`);
} unbindDriverWithDeviceId(deviceId: number): Promise<number>
解除设备绑定,调用前需要先通过bindDriverWithDeviceId绑定设备。使用Promise异步回调。
需要权限: ohos.permission.ACCESS_DDK_DRIVERS
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<number> | Promise对象,返回解除绑定的设备ID。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 26300001 | ExternalDeviceManager service exception. |
| 26300003 | There is no binding relationship. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.unbindDriverWithDeviceId(12345678).then((data: number) => {
console.info(`unbindDriverWithDeviceId success, Device_Id is ${data}.`);
}, (error: BusinessError) => {
console.error(`unbindDriverWithDeviceId async fail. Code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
console.error(`unbindDriverWithDeviceId fail. Code is ${error.code}, message is ${error.message}`);
} bindDevice(deviceId: number, onDisconnect: AsyncCallback<number>, callback: AsyncCallback<{deviceId: number; remote: rpc.IRemoteObject;}>): void
根据queryDevices()返回的设备信息绑定设备。必须和unbindDevice接口成对使用。
需要调用deviceManager.queryDevices()获取设备信息列表。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| onDisconnect | AsyncCallback<number> | 是 | 回调函数。当绑定设备断开时,err为undefined,data为解绑的设备ID;否则为错误对象。 |
| callback | AsyncCallback<{deviceId: number; remote: rpc.IRemoteObject;}> | 是 | 回调函数。当绑定设备成功时,err为undefined,data包含设备ID和绑定设备驱动通信对象;否则为错误对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 22900001 | ExternalDeviceManager service exception. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { rpc } from '@kit.IPCKit';
interface DataType {
deviceId: number;
remote: rpc.IRemoteObject;
}
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDevice(12345678, (error: BusinessError, data: number) => {
console.error(`Device is disconnected`);
}, (error: BusinessError, data: DataType) => {
if (error) {
console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
return;
}
console.info(`bindDevice success`);
});
} catch (error) {
console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
} bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback<number>, callback: AsyncCallback<RemoteDeviceDriver>): void
根据queryDevices()返回的设备信息绑定设备。必须与unbindDevice接口成对使用。
需要调用deviceManager.queryDevices()获取设备信息列表。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| onDisconnect | AsyncCallback<number> | 是 | 回调函数。当绑定设备断开时,err为undefined,data为解绑的设备ID;否则为错误对象。 |
| callback | AsyncCallback<RemoteDeviceDriver> | 是 | 回调函数。当绑定设备驱动成功时,err为undefined,data为包括设备ID和远程对象的RemoteDeviceDriver对象;否则为错误对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 22900001 | ExternalDeviceManager service exception. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDeviceDriver(12345678, (error: BusinessError, data: number) => {
console.error(`Device is disconnected`);
}, (error: BusinessError, data: deviceManager.RemoteDeviceDriver) => {
if (error) {
console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
return;
}
console.info(`bindDeviceDriver success`);
});
} catch (error) {
console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
} bindDevice(deviceId: number, onDisconnect: AsyncCallback<number>): Promise<{deviceId: number; remote: rpc.IRemoteObject;}>
根据queryDevices()返回的设备信息绑定设备。必须和unbindDevice接口成对使用。使用Promise异步回调。
需要调用deviceManager.queryDevices获取设备信息列表。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| onDisconnect | AsyncCallback<number> | 是 | 回调函数。当绑定设备断开时,err为undefined,data为解绑的设备ID;否则为错误对象。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<{deviceId: number; remote: rpc.IRemoteObject;}> | Promise对象,返回一个包含设备ID和IRemoteObject的对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 22900001 | ExternalDeviceManager service exception. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDevice(12345678, (error: BusinessError, data: number) => {
console.error(`Device is disconnected`);
}).then(data => {
console.info(`bindDevice success, Device_Id is ${data.deviceId}.
remote is ${data.remote != null ? data.remote.getDescriptor(): "null"}`);
}, (error: BusinessError) => {
console.error(`bindDevice async fail. Code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
console.error(`bindDevice fail. Code is ${error.code}, message is ${error.message}`);
} bindDeviceDriver(deviceId: number, onDisconnect: AsyncCallback<number>): Promise<RemoteDeviceDriver>
根据queryDevices()返回的设备信息绑定设备。必须与unbindDevice接口成对使用。使用Promise异步回调。
需要调用deviceManager.queryDevices获取设备信息列表。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| onDisconnect | AsyncCallback<number> | 是 | 回调函数。当绑定设备断开时,err为undefined,data为解绑的设备ID;否则为错误对象。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<RemoteDeviceDriver> | Promise对象,返回RemoteDeviceDriver对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 22900001 | ExternalDeviceManager service exception. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.bindDeviceDriver(12345678, (error: BusinessError, data: number) => {
console.error(`Device is disconnected`);
}).then((data: deviceManager.RemoteDeviceDriver) => {
console.info(`bindDeviceDriver success, Device_Id is ${data.deviceId}.
remote is ${data.remote != null ? data.remote.getDescriptor(): "null"}`);
}, (error: BusinessError) => {
console.error(`bindDeviceDriver async fail. Code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
console.error(`bindDeviceDriver fail. Code is ${error.code}, message is ${error.message}`);
} unbindDevice(deviceId: number, callback: AsyncCallback<number>): void
解除设备绑定。必须先通过bindDevice接口绑定设备。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
| callback | AsyncCallback<number> | 是 | 回调函数。当解绑设备成功时,err为undefined,data为设备ID;否则为错误对象。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. |
| 22900001 | ExternalDeviceManager service exception. |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.unbindDevice(12345678, (error: BusinessError, data: number) => {
if (error) {
console.error(`unbindDevice async fail. Code is ${error.code}, message is ${error.message}`);
return;
}
console.info(`unbindDevice success`);
});
} catch (error) {
console.error(`unbindDevice fail. Code is ${error.code}, message is ${error.message}`);
} unbindDevice(deviceId: number): Promise<number>
解除设备绑定。必须先通过bindDevice接口绑定设备。使用Promise异步回调。
需要权限: ohos.permission.ACCESS_EXTENSIONAL_DEVICE_DRIVER
系统能力: SystemCapability.Driver.ExternalDevice
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | number | 是 | 设备ID,通过queryDevices获得。 |
错误码:
| 错误码ID | 错误信息 |
|---|---|
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed. |
| 22900001 | ExternalDeviceManager service exception. |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<number> | Promise对象,返回解除绑定的设备ID。 |
示例:
import { deviceManager } from '@kit.DriverDevelopmentKit';
import { BusinessError } from '@kit.BasicServicesKit';
try {
// 12345678为示例deviceId,应用开发时可通过queryDevices查询到相应设备的deviceId作为入参
deviceManager.unbindDevice(12345678).then((data: number) => {
console.info(`unbindDevice success, Device_Id is ${data}.`);
}, (error: BusinessError) => {
console.error(`unbindDevice async fail. Code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
console.error(`unbindDevice fail. Code is ${error.code}, message is ${error.message}`);
} 外设信息。
系统能力: SystemCapability.Driver.ExternalDevice
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| busType | BusType | 否 | 否 | 总线类型。 |
| deviceId | number | 否 | 否 | 设备ID。 |
| description | string | 否 | 否 | 设备描述。 |
USB设备信息,继承自Device。
系统能力: SystemCapability.Driver.ExternalDevice
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| vendorId | number | 否 | 否 | USB设备Vendor ID。 |
| productId | number | 否 | 否 | USB设备Product ID。 |
远程设备驱动。
系统能力: SystemCapability.Driver.ExternalDevice
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| deviceId | number | 否 | 否 | 设备ID。 |
| remote | rpc.IRemoteObject | 否 | 否 | 远程驱动通信对象。 |