1e41f4b71Sopenharmony_ci# @ohos.app.ability.DriverExtensionAbility (驱动程序扩展能力) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciDriverExtensionAbility模块提供驱动相关扩展能力,提供驱动创建、销毁、连接、断开等生命周期回调。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8e41f4b71Sopenharmony_ci> 本模块接口仅可在Stage模型下使用。 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci## 导入模块 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci```ts 13e41f4b71Sopenharmony_ciimport { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 14e41f4b71Sopenharmony_ci``` 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci## 属性 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明 | 22e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | -------- | 23e41f4b71Sopenharmony_ci| context | [DriverExtensionContext](js-apis-inner-application-driverExtensionContext.md) | 是 | 否 | DriverExtension的上下文环境,继承自ExtensionContext。 | 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci## DriverExtensionAbility.onInit 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_cionInit(want: Want): void; 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ciExtension生命周期回调,在创建时回调,执行初始化业务逻辑操作。 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci**参数:** 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 37e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 38e41f4b71Sopenharmony_ci| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md) | 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci**示例:** 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci ```ts 43e41f4b71Sopenharmony_ci import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 44e41f4b71Sopenharmony_ci import { Want } from '@kit.AbilityKit'; 45e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 46e41f4b71Sopenharmony_ci onInit(want : Want) { 47e41f4b71Sopenharmony_ci console.log('onInit, want: ${want.abilityName}'); 48e41f4b71Sopenharmony_ci } 49e41f4b71Sopenharmony_ci } 50e41f4b71Sopenharmony_ci ``` 51e41f4b71Sopenharmony_ci 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci## DriverExtensionAbility.onRelease 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_cionRelease(): void; 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ciExtension生命周期回调,在销毁时回调,执行资源清理等操作。 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci**示例:** 62e41f4b71Sopenharmony_ci 63e41f4b71Sopenharmony_ci ```ts 64e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 65e41f4b71Sopenharmony_ci onRelease() { 66e41f4b71Sopenharmony_ci console.log('onRelease'); 67e41f4b71Sopenharmony_ci } 68e41f4b71Sopenharmony_ci } 69e41f4b71Sopenharmony_ci ``` 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci## DriverExtensionAbility.onConnect 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_cionConnect(want: Want): rpc.RemoteObject | Promise<rpc.RemoteObject>; 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ciExtension生命周期回调,如果是connectAbility拉起的服务,会在onCreate之后回调。返回一个RemoteObject对象,用于客户端和服务端进行通信。 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci**参数:** 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 83e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 84e41f4b71Sopenharmony_ci| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci**返回值:** 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci| 类型 | 说明 | 89e41f4b71Sopenharmony_ci| -------- | -------- | 90e41f4b71Sopenharmony_ci| rpc.RemoteObject | 一个RemoteObject对象,用于客户端和服务端进行通信。 | 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci**示例:** 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci ```ts 95e41f4b71Sopenharmony_ci import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 96e41f4b71Sopenharmony_ci import { rpc } from '@kit.IPCKit'; 97e41f4b71Sopenharmony_ci import { Want } from '@kit.AbilityKit'; 98e41f4b71Sopenharmony_ci class StubTest extends rpc.RemoteObject{ 99e41f4b71Sopenharmony_ci constructor(des : string) { 100e41f4b71Sopenharmony_ci super(des); 101e41f4b71Sopenharmony_ci } 102e41f4b71Sopenharmony_ci onRemoteMessageRequest(code : number, data : rpc.MessageSequence, reply : rpc.MessageSequence, option : rpc.MessageOption) { 103e41f4b71Sopenharmony_ci //必须重写此接口 104e41f4b71Sopenharmony_ci return true; 105e41f4b71Sopenharmony_ci } 106e41f4b71Sopenharmony_ci } 107e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 108e41f4b71Sopenharmony_ci onConnect(want : Want) { 109e41f4b71Sopenharmony_ci console.log('onConnect , want: ${want.abilityName}'); 110e41f4b71Sopenharmony_ci return new StubTest('test'); 111e41f4b71Sopenharmony_ci } 112e41f4b71Sopenharmony_ci } 113e41f4b71Sopenharmony_ci ``` 114e41f4b71Sopenharmony_ci 115e41f4b71Sopenharmony_ci如果生成返回值RemoteObject依赖一个异步接口,可以使用异步生命周期: 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci ```ts 118e41f4b71Sopenharmony_ci import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 119e41f4b71Sopenharmony_ci import { rpc } from '@kit.IPCKit'; 120e41f4b71Sopenharmony_ci import { Want } from '@kit.AbilityKit'; 121e41f4b71Sopenharmony_ci class StubTest extends rpc.RemoteObject{ 122e41f4b71Sopenharmony_ci constructor(des : string) { 123e41f4b71Sopenharmony_ci super(des); 124e41f4b71Sopenharmony_ci } 125e41f4b71Sopenharmony_ci onRemoteMessageRequest(code : number, data : rpc.MessageSequence, reply : rpc.MessageSequence, option : rpc.MessageOption) { 126e41f4b71Sopenharmony_ci //必须重写此接口 127e41f4b71Sopenharmony_ci return true; 128e41f4b71Sopenharmony_ci } 129e41f4b71Sopenharmony_ci } 130e41f4b71Sopenharmony_ci async function getDescriptor() { 131e41f4b71Sopenharmony_ci // 调用异步函数... 132e41f4b71Sopenharmony_ci return "asyncTest" 133e41f4b71Sopenharmony_ci } 134e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 135e41f4b71Sopenharmony_ci async onConnect(want : Want) { 136e41f4b71Sopenharmony_ci console.log(`onConnect , want: ${want.abilityName}`); 137e41f4b71Sopenharmony_ci let descriptor = await getDescriptor(); 138e41f4b71Sopenharmony_ci return new StubTest(descriptor); 139e41f4b71Sopenharmony_ci } 140e41f4b71Sopenharmony_ci } 141e41f4b71Sopenharmony_ci ``` 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci## DriverExtensionAbility.onDisconnect 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_cionDisconnect(want: Want): void | Promise\<void>; 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ciExtension的生命周期回调,客户端执行断开连接服务时回调。 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci**参数:** 152e41f4b71Sopenharmony_ci 153e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 154e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 155e41f4b71Sopenharmony_ci| want |[Want](../apis-ability-kit/js-apis-app-ability-want.md)| 是 | 当前Extension相关的Want类型信息,包括ability名称、bundle名称等。 | 156e41f4b71Sopenharmony_ci 157e41f4b71Sopenharmony_ci**示例:** 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci ```ts 160e41f4b71Sopenharmony_ci import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 161e41f4b71Sopenharmony_ci import { Want } from '@kit.AbilityKit'; 162e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 163e41f4b71Sopenharmony_ci onDisconnect(want : Want) { 164e41f4b71Sopenharmony_ci console.log('onDisconnect, want: ${want.abilityName}'); 165e41f4b71Sopenharmony_ci } 166e41f4b71Sopenharmony_ci } 167e41f4b71Sopenharmony_ci ``` 168e41f4b71Sopenharmony_ci 169e41f4b71Sopenharmony_ci在执行完onDisconnect生命周期回调后,应用可能会退出,从而可能导致onDisconnect中的异步函数未能正确执行,比如异步写入数据库。可以使用异步生命周期,以确保异步onDisconnect完成后再继续后续的生命周期。 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ci ```ts 172e41f4b71Sopenharmony_ci import { DriverExtensionAbility } from '@kit.DriverDevelopmentKit'; 173e41f4b71Sopenharmony_ci import { Want } from '@kit.AbilityKit'; 174e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 175e41f4b71Sopenharmony_ci async onDisconnect(want : Want) { 176e41f4b71Sopenharmony_ci console.log('onDisconnect, want: ${want.abilityName}'); 177e41f4b71Sopenharmony_ci // 调用异步函数... 178e41f4b71Sopenharmony_ci } 179e41f4b71Sopenharmony_ci } 180e41f4b71Sopenharmony_ci ``` 181e41f4b71Sopenharmony_ci 182e41f4b71Sopenharmony_ci 183e41f4b71Sopenharmony_ci## DriverExtensionAbility.onDump 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_cionDump(params: Array\<string>): Array\<string>; 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_ci转储客户端信息时调用。 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Driver.ExternalDevice 190e41f4b71Sopenharmony_ci 191e41f4b71Sopenharmony_ci**参数:** 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 194e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 195e41f4b71Sopenharmony_ci| params | Array\<string> | 是 | 表示命令形式的参数。| 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ci**示例:** 198e41f4b71Sopenharmony_ci 199e41f4b71Sopenharmony_ci ```ts 200e41f4b71Sopenharmony_ci class DriverExt extends DriverExtensionAbility { 201e41f4b71Sopenharmony_ci onDump(params : Array<string>) { 202e41f4b71Sopenharmony_ci console.log(`dump, params: ${JSON.stringify(params)}`); 203e41f4b71Sopenharmony_ci return ['params']; 204e41f4b71Sopenharmony_ci } 205e41f4b71Sopenharmony_ci } 206e41f4b71Sopenharmony_ci ``` 207e41f4b71Sopenharmony_ci 208