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