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