accessibilityextensionability.md 8.2 KB
Newer Older
L
Ling 已提交
1
# AccessibilityExtensionAbility
M
marui 已提交
2 3 4 5 6 7 8 9 10 11 12

AccessibilityExtensionAbility基于ExtensionAbility框架,提供无障碍扩展服务,开发者可以基于AccessibilityExtensionAbility模板开发自己的辅助功能应用,协助用户完成一些快捷的交互过程。

> **环境要求**
>
> IDE: DevEco Studio 3.0 Beta3 (3.0.0.900)及以后版本
>
> SDK: API Version 9 及以后版本
>
> Model: Stage

J
jinqi6 已提交
13 14 15 16
## AccessibilityExtensionAbility概述

“信息无障碍”译自“Accessibility”,是指任何人在任何情况下都能平等、方便地获取信息并利用信息。其目的是缩小全社会不同阶层、不同地区、不同年龄、不同健康状况的人群在信息理解、信息交互、信息利用方面的数字鸿沟,使其更加方便地参与社会生活,享受数字发展带来的便利。

17
AccessibilityExtensionAbility为无障碍扩展服务框架,允许三方开发自己的扩展服务,提供在应用程序和扩展服务之间交换信息的标准机制,以便为各种障碍人群和障碍场景提供辅助能力,增强用户的无障碍使用体验。例如在使用微信时,利用辅助应用旁白,用户可以“听见”当前屏幕内容。
J
jinqi6 已提交
18 19 20 21

![AccessibilityFramework](figures/AccessibilityFramework.png)

1. Accessibility App:开发者基于无障碍扩展服务框架扩展出来的扩展服务应用,如视障用户使用的读屏App。
22
2. Tartget App:被Accessibility App辅助的目标应用。
J
jinqi6 已提交
23
3. AccessibilityAbilityManagerService(AAMS):无障碍扩展服务框架主服务,用于对Accessibility App生命周期进行管理,同时为Accessibility App和Target App提供信息交互的桥梁。
24 25
4. AccessibilityAbility(AAkit):Accessibility App利用AAkit构建扩展服务Ability运行环境,并为Accessibility App提供可查询和操作Target App的接口,如查询节点信息、对节点执行点击/长按操作等。
5. AccessibilitySystemAbilityClient(ASACkit):Target App通过ASACkit向AAMS发送无障碍事件,如内容变化事件等,同时响应Accessibility App通过AAMS请求的指令,如查询节点信息、对节点执行点击/长按操作等。
J
jinqi6 已提交
26

M
marui 已提交
27
## 如何创建一个无障碍扩展服务
28

29
开发者在创建一个无障碍扩展服务时,如工程满足环境要求,开发者可自主选择是否跳过创建工程步骤,在已有工程中新增无障碍扩展服务。一个工程仅支持创建一个无障碍扩展服务。
M
marui 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

### 创建工程

如需新增独立的无障碍扩展服务应用,可按以下步骤进行。在DevEco Studio中新建一个工程,具体步骤如下:
1. 在DevEco Studio的左上角标签栏,选择`File -> New -> Create Project`新建一个工程;
2. 根据工程创建向导,选择`OpenHarmony`标签页,选择`Empty Ability`模板,点击Next,进入项目详细配置页;
3. 选择项目类型为Application,Compile API(高版本为Compile SDK)为9,Model为`Stage`,然后点击Finish完成工程创建。

### 新建AccessibilityExtAbility文件

在已创建工程的ets文件夹下创建AccessibilityExtAbility文件夹,在该文件夹下创建AccessibilityExtAbility.ts文件,在新增的文件中加入以下代码:

```typescript
import AccessibilityExtensionAbility from '@ohos.application.AccessibilityExtensionAbility';

class AccessibilityExtAbility extends AccessibilityExtensionAbility {
    onConnect() {
47
        console.info('AccessibilityExtAbility onConnect');
M
marui 已提交
48 49 50
    }

    onDisconnect() {
51
        console.info('AccessibilityExtAbility onDisconnect');
M
marui 已提交
52 53 54
    }

    onAccessibilityEvent(accessibilityEvent) {
55
        console.info('AccessibilityExtAbility onAccessibilityEvent: ' + JSON.stringify(accessibilityEvent));
M
marui 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    }
}

export default AccessibilityExtAbility;
```

其中,主要定义了以下接口:

| 接口 | 描述 |
| ---- | ---- |
| onConnect(): void | 当扩展服务连接时回调 |
| onDisconnect(): void | 当扩展服务断开时回调 |
| onAccessibilityEvent(event: AccessibilityEvent): void | 当无障碍事件发生时回调 |

## 如何处理一个无障碍事件

相关无障碍事件可以在`onAccessibilityEvent()`方法中进行业务逻辑处理,具体事件可参考[AccessibilityEvent](../reference/apis/js-apis-application-accessibilityExtensionAbility.md#accessibilityevent)。此处以事件`pageStateUpdate`为例:

```typescript
onAccessibilityEvent(accessibilityEvent) {
76
    console.info('AccessibilityExtAbility onAccessibilityEvent: ' + JSON.stringify(accessibilityEvent));
M
marui 已提交
77
    if (accessibilityEvent.eventType === 'pageStateUpdate') {
78
        console.info('AccessibilityExtAbility onAccessibilityEvent: pageStateUpdate');
M
marui 已提交
79 80 81 82
        // TODO: 自定义相关逻辑开发
    }
}
```
83 84 85
在相应的无障碍事件中,可以使用[辅助功能扩展上下文(AccessibilityExtensionContext)](../reference/apis/js-apis-inner-application-accessibilityExtensionContext.md)提供的接口进行扩展开发,包括允许配置辅助应用关注信息类型、查询节点信息、手势注入等。

此外,还可在无障碍扩展服务中对物理按键事件进行处理,具体可参考[onKeyEvent](../reference/apis/js-apis-application-accessibilityExtensionAbility.md#accessibilityextensionabilityonkeyevent)
M
marui 已提交
86 87 88

## 如何声明无障碍扩展服务具备的能力

89
在完成自定义无障碍扩展服务的逻辑开发后,还需要在工程中Module对应的module.json5文件中加入新增扩展服务的配置信息,其中`srcEntry`标签为`extensionAbility`对应的路径。需要注意的一点是配置信息中的type标签要按照与无障碍子系统的约定进行配置,固定为`accessibility`,否则将无法正常连接。
M
marui 已提交
90 91 92 93 94

```json
"extensionAbilities": [
  {
    "name": "AccessibilityExtAbility",
95
    "srcEntry": "./ets/AccessibilityExtAbility/AccessibilityExtAbility.ts",
M
marui 已提交
96 97 98 99 100 101 102 103 104 105 106 107
    "label": "$string:MainAbility_label",
    "description": "$string:MainAbility_desc",
    "type": "accessibility",
    "metadata": [
      {
        "name": "ohos.accessibleability",
        "resource": "$profile:accessibility_config"
      }
    ]
  }
]
```
108
另外,配置信息中的`accessibility_config`为无障碍扩展服务的具体配置,需要在`resources/base/profile/`下新建`accessibility_config.json`文件,在该文件中声明此无障碍扩展服务具备的[能力类型](../reference/apis/js-apis-accessibility.md#capability):
M
marui 已提交
109 110 111 112 113 114 115 116 117 118
```json
{
  "accessibilityCapabilities": [
    "retrieve",
    "gesture"
  ]
}
```
## 如何开启自定义的无障碍扩展服务

119 120 121 122
当前提供命令行和设备设置中的扩展服务管理页的开关两种方式来开启设备的无障碍扩展能力:  

 **方式一:**  使用命令行进行开启关闭。  
通过hdc shell命令,输入以下设备系统命令,对扩展服务进行开启/关闭:
M
marui 已提交
123 124 125 126 127 128 129
- 开启命令:`accessibility enable -a AccessibilityExtAbility -b com.example.demo -c rg`
- 关闭命令:`accessibility disable -a AccessibilityExtAbility -b com.example.demo`

其中,`AccessibilityExtAbility`为自定义的无障碍扩展服务名,`com.example.demo`为bundleName,`rg`为无障碍扩展服务具体的类型(其中,r为`retrieve`的首字母,其余同理)。

若开启或关闭成功,则会打印`enable ability successfully``disable ability successfully`

130

131 132
 **方式二:** 在设备设置中的扩展服务管理页开启无障碍扩展服务
- 打开设备设置页面,进入“辅助功能”,“扩展服务”小标题下的“已安装的服务”显示当前安装的扩展服务个数,点击进入,展示安装的扩展服务列表;  
133 134 135
未安装扩展服务时,“已安装的扩展服务”不可点击,并显示“无服务”;<br>
- 选择需要开启/关闭的扩展服务,通过开关按钮进行扩展服务的开启/关闭;  
- 开启时,弹出安全提醒,在倒计时结束后,勾选“我已知晓如上风险,并自愿承担可能导致的后果。”后,可选择“开启”/“不开启”按钮;  关闭时,将开启的开关关闭,即可关闭已开启的扩展服务。
136

L
Ling 已提交
137
## 相关实例
M
marui 已提交
138

L
Ling 已提交
139
针对AccessibilityExtensionAbility开发,有以下相关实例可供参考:
M
marui 已提交
140

141
- [无障碍扩展(ArkTS)(Full SDK)(API9)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/SystemFeature/ApplicationModels/AccessibilityExtAbility)