• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# DriverExtensionAbility
2
3[DriverExtensionAbility](../reference/apis/js-apis-app-ability-driverExtensionAbility.md)是DRIVER类型的ExtensionAbility组件,提供驱动相关扩展框架。对于部分设备,支持插入外接的硬件模块来扩展设备能力, 此时可以以应用方式安装该硬件模块的驱动程序。通过DriverExtensionAbility可实现此类应用的开发。
4
5
6[DriverExtensionAbility](../reference/apis/js-apis-app-ability-driverExtensionAbility.md)可以通过DriverExtensionManager被应用绑定,并根据应用的请求信息在后台处理相关事务。
7每个类型的ExtensionAbility都有自己的Context,DriverExtensionAbility通过[DriverExtensionContext](../reference/apis/js-apis-inner-application-driverExtensionContext.md)提供相关能力。
8
9本章节将从如下场景来介绍DriverExtensionAbility的基本使用。
10
11- [DriverExtensionAbility](#driverextensionability)
12  - [开发步骤](#开发步骤)
13
14## 开发步骤
15
16开发者在实现一个驱动时,需要在DevEco Studio工程中手动新建一个DriverExtensionAbility,具体步骤如下。
17
181. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为driverextability。
19
202. 在driverextability目录,右键选择“New > TypeScript File”,新建一个TypeScript文件并命名为DriverExtAbility.ts21
223. 打开DriverExtAbility.ts文件,导入[RPC通信模块](../reference/apis/js-apis-rpc.md),重载onRemoteMessageRequest()方法,接收应用传递过来的消息,并将处理的结果返回给应用。REQUEST_VALUE用于校验应用发送的服务请求码。
23
24   ```ts
25   import rpc from '@ohos.rpc';
26
27   const REQUEST_CODE = 99;
28
29   class StubTest extends rpc.RemoteObject {
30     constructor(des: string) {
31       super(des);
32     }
33
34     // 接收应用传递过来的消息处理,以及将处理的结果返回给应用
35     onRemoteMessageRequest(code: number, data: rpc.MessageSequence, reply: rpc.MessageSequence,
36                            option: rpc.MessageOption) {
37       if (code === REQUEST_CODE) {
38         // 接收应用传递过来的数据
39         // 应用使用多次调用data.writeInt()写入多个数据时,驱动可以通过多次调用data.readInt()方法接收对应的数据
40         let optFir: number = data.readInt();
41         let optSec: number = data.readInt();
42         // 驱动将数据的处理结果返回给应用
43         // 示例中为接收了两个数据,并将两个数据的求和返回给应用
44         reply.writeInt(optFir + optSec);
45       }
46       return true;
47     }
48   }
49   ```
50
51
524. 在DriverExtAbility.ts文件中,增加导入[DriverExtensionAbility](../reference/apis/js-apis-app-ability-driverExtensionAbility.md)的依赖包,该包提供了onInit()、onRelease()、onConnect()和onDisconnect()生命周期回调,自定义类继承[DriverExtensionAbility](../reference/apis/js-apis-app-ability-driverExtensionAbility.md)并根据需要重写需要的生命周期回调。
53
54   ```ts
55   import DriverExtensionAbility from '@ohos.app.ability.DriverExtensionAbility';
56   import Want from '@ohos.app.ability.Want';
57   import rpc from '@ohos.rpc';
58
59   const TAG: string = '[Example].[Entry].[DriverExtAbility]';
60   const REQUEST_CODE = 99;
61
62   class StubTest extends rpc.RemoteObject {
63     // ...
64   }
65
66   export default class DriverExtAbility extends DriverExtensionAbility {
67     onInit(want: Want) {
68       console.info(TAG, `onInit, want: ${want.abilityName}`);
69     }
70
71     onRelease() {
72       console.info(TAG, `onRelease`);
73     }
74
75     onConnect(want: Want) {
76       console.info(TAG, `onConnect, want: ${want.abilityName}`);
77       return new StubTest("test");
78     }
79
80     onDisconnect(want: Want) {
81       console.info(TAG, `onDisconnect, want: ${want.abilityName}`);
82     }
83
84     onDump(params: Array<string>) {
85       console.info(TAG, `onDump, params:` + JSON.stringify(params));
86       return ['params'];
87     }
88   }
89   ```
90
915. 在工程Module对应的[module.json5配置文件](../quick-start/module-configuration-file.md)中注册DriverExtensionAbility,type标签需要设置为“driver”,srcEntry标签表示当前ExtensionAbility组件所对应的代码路径。
92
93   ```json
94   {
95     "module": {
96       // ...
97       "extensionAbilities": [
98         {
99           "name": "DriverExtAbility",
100           "icon": "$media:icon",
101           "description": "driver",
102           "type": "driver",
103           "exported": true,
104           "srcEntry": "./ets/driverextability/DriverExtAbility.ts",
105           "metadata": [
106            {
107              "name": "bus", // 必填项,所属总线
108              "value": "USB",
109            },
110            {
111              "name": "desc", // 必填项,必要的驱动描述
112              "value": "the sample of driverExtensionAbility",
113            },
114            {
115              "name": "vendor", // 必填项,驱动厂商名称
116              "value": "string",
117            },
118            {
119              "name": "vid", // 支持 USB vendor id 列表,用逗号分隔,不可为空
120              "value": "string, string",
121            },
122            {
123              "name": "pid", // 支持的 USB product id 列表,用逗号分隔,不可为空
124              "value": "string, string",
125            }
126           ]
127         }
128       ]
129     }
130   }
131   ```