1# @ohos.app.ability.DriverExtensionAbility (Driver Extension Ability)
2
3The **DriverExtensionAbility** module provides the ExtensionAbility related to drivers. It provides lifecycle callbacks to be invoked when a driver is created, destroyed, connected, or disconnected.
4
5> **NOTE**
6>
7> - The initial APIs of this module are supported since API version 10. Newly added APIs will be marked with a superscript to indicate their earliest API version.
8> - The APIs of this module can be used only in the stage model.
9
10## Modules to Import
11
12```ts
13import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
14```
15
16## Attributes
17
18**System capability**: SystemCapability.Driver.ExternalDevice
19
20
21| Name| Type| Readable| Writable| Description|
22| -------- | -------- | -------- | -------- | -------- |
23| context | [DriverExtensionContext](js-apis-inner-application-driverExtensionContext.md)  | Yes| No| Context of the **DriverExtension**. This context is inherited from **ExtensionContext**.|
24
25
26## DriverExtensionAbility.onInit
27
28onInit(want: Want): void;
29
30Called when a DriverExtensionAbility is created to initialize the service logic.
31
32**System capability**: SystemCapability.Driver.ExternalDevice
33
34**Parameters**
35
36| Name| Type| Mandatory| Description|
37| -------- | -------- | -------- | -------- |
38| want |  [Want](../apis-ability-kit/js-apis-app-ability-want.md) | Yes| Want information related to this DriverExtensionAbility, including the ability name and bundle name.|
39
40**Example**
41
42  ```ts
43  import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
44  import Want from '@ohos.app.ability.Want';
45  class DriverExt extends DriverExtension {
46    onInit(want : Want) {
47      console.log('onInit, want: ${want.abilityName}');
48    }
49  }
50  ```
51
52
53## DriverExtensionAbility.onRelease
54
55onRelease(): void;
56
57Called when this DriverExtensionAbility is destroyed to clear resources.
58
59**System capability**: SystemCapability.Driver.ExternalDevice
60
61**Example**
62
63  ```ts
64  class DriverExt extends DriverExtension {
65    onRelease() {
66      console.log('onRelease');
67    }
68  }
69  ```
70
71
72## DriverExtensionAbility.onConnect
73
74onConnect(want: Want): rpc.RemoteObject | Promise<rpc.RemoteObject>;
75
76Called following **onCreate()** when a DriverExtensionAbility is started by calling **connectAbility()**. A **RemoteObject** object is returned for communication between the server and client.
77
78**System capability**: SystemCapability.Driver.ExternalDevice
79
80**Parameters**
81
82| Name| Type| Mandatory| Description|
83| -------- | -------- | -------- | -------- |
84| want |  [Want](../apis-ability-kit/js-apis-app-ability-want.md)| Yes| Want information related to this DriverExtensionAbility, including the ability name and bundle name.|
85
86**Return value**
87
88| Type| Description|
89| -------- | -------- |
90| rpc.RemoteObject | A **RemoteObject** object used for communication between the server and client.|
91
92**Example**
93
94  ```ts
95  import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
96  import rpc from '@ohos.rpc';
97  import Want from '@ohos.app.ability.Want';
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        // This interface must be overridden.
104        return true;
105      }
106  }
107  class DriverExt extends DriverExtension {
108    onConnect(want : Want) {
109      console.log('onConnect , want: ${want.abilityName}');
110      return new StubTest('test');
111    }
112  }
113  ```
114
115If the returned **RemoteObject** object depends on an asynchronous API, you can use the asynchronous lifecycle.
116
117  ```ts
118import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
119import rpc from '@ohos.rpc';
120import Want from '@ohos.app.ability.Want';
121class 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      // This interface must be overridden.
127      return true;
128    }
129}
130async function getDescriptor() {
131    // Call the asynchronous function.
132    return "asyncTest"
133}
134class DriverExt extends DriverExtension {
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
147Called when a client is disconnected from this DriverExtensionAbility.
148
149**System capability**: SystemCapability.Driver.ExternalDevice
150
151**Parameters**
152
153| Name| Type| Mandatory| Description|
154| -------- | -------- | -------- | -------- |
155| want |[Want](../apis-ability-kit/js-apis-app-ability-want.md)| Yes| Want information related to this DriverExtensionAbility, including the ability name and bundle name.|
156
157**Example**
158
159  ```ts
160  import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
161  import Want from '@ohos.app.ability.Want';
162  class DriverExt extends DriverExtension {
163    onDisconnect(want : Want) {
164      console.log('onDisconnect, want: ${want.abilityName}');
165    }
166  }
167  ```
168
169After the **onDisconnect** lifecycle callback is executed, the application may exit. As a result, the asynchronous function in **onDisconnect** may fail to be executed correctly, for example, asynchronously writing data to the database. The asynchronous lifecycle can be used to ensure that the subsequent lifecycle continues after the asynchronous **onDisconnect** is complete.
170
171  ```ts
172import DriverExtension from '@ohos.app.ability.DriverExtensionAbility';
173import Want from '@ohos.app.ability.Want';
174class DriverExt extends DriverExtension {
175  async onDisconnect(want : Want) {
176    console.log('onDisconnect, want: ${want.abilityName}');
177    // Call the asynchronous function.
178  }
179}
180  ```
181
182
183## DriverExtensionAbility.onDump
184
185onDump(params: Array\<string>): Array\<string>;
186
187Dumps client information.
188
189**System capability**: SystemCapability.Driver.ExternalDevice
190
191**Parameters**
192
193| Name| Type| Mandatory| Description|
194| -------- | -------- | -------- | -------- |
195| params | Array\<string> | Yes| Parameters in the form of a command.|
196
197**Example**
198
199  ```ts
200  class DriverExt extends DriverExtension {
201      onDump(params : Array<string>) {
202          console.log(`dump, params: ${JSON.stringify(params)}`);
203          return ['params'];
204      }
205  }
206  ```
207