# AccessibilityBasedCapabilities **Repository Path**: cencus/accessibility-based-capabilities ## Basic Information - **Project Name**: AccessibilityBasedCapabilities - **Description**: 本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-07-26 - **Last Updated**: 2024-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于原生能力的无障碍模式 ## 介绍 本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 ## 效果图预览 原生组件屏幕朗读: ![](screenshots/device/phone.png) 创建说明: 1. 在已创建工程的ets文件夹下创建accessibility文件夹,在该文件夹下创建AccessibilityExtAbility.ets文件,可在该文件中实现一些回调函数,并加入业务处理逻辑的调用,具体可参考src/main/ets/accessibility/AccessibilityExtAbility.ets代码。 2. 在已创建的accessibility文件夹下创建AccessibilityManager.ets文件,用于存放业务逻辑代码,可参考src/main/ets/accessibility/AccessibilityManager.ets进行实现。 3. 在src/main/module.json5下新增扩展服务的配置信息,其中srcEntry标签为extensionAbility对应的路径。需要注意的一点是配置信息中的type标签要按照与无障碍子系统的约定进行配置,固定为accessibility,否则将无法正常连接。 ``` "extensionAbilities": [ { "name": "AccessibilityExtAbility", "srcEntry": "./ets/accessibility/AccessibilityExtAbility.ets", "label": "$string:MainAbility_label", "description": "$string:MainAbility_desc", "type": "accessibility", "metadata": [ { "name": "ohos.accessibleability", "resource": "$profile:accessibility_config" } ] } ] ``` 4. 另外,配置信息中的accessibility_config为无障碍扩展服务的具体配置,需要在resources/base/profile/下新建accessibility_config.json文件,在该文件中声明此无障碍扩展服务具备的能力类型,根据业务功能合理声明能力类型,本案例中,需要如下声明: ``` { "accessibilityCapabilities": [ "retrieve", "gesture", "touchGuide" ] } ``` 使用说明: 1. 打开设置->辅助功能->屏幕朗读->屏幕朗读选项。 2. 打开屏幕朗读后,关键手势如下: 1. 单击选择某个项目,双击确认选择。 2. 返回桌面及桌面切换等原有的单指操作都需要换成两指操作。 3. 下滑屏幕朗读下一项,上滑屏幕朗读上一项。 3. 打开应用,下滑或上滑查看朗读情况。 ## 工程目录 工程的目录结构 ``` ├──entry/src/main/ets // 代码区 │ ├──accessibility │ │ ├──AccessibilityExtAbility.ets // 无障碍扩展ability │ │ └──AccessibilityManager.ets // 无障碍扩展管理 │ ├──common │ │ └──Constants.ets // 常量 │ ├──entryability │ │ └──EntryAbility.ets // EntryAbility │ ├──pages │ │ └──Index.ets // 组合标注sample页 │ ├──utils │ │ └──Logger.ets // 日志工具类 │ ├──view │ │ └──WeatherLine.ets // 天气行组件 │ └──viewmodel │ └──WeatherViewModel.ets // 天气数据viewmodel └──entry/src/main/resources // 应用资源目录 ``` ## 具体实现 使用原生组件时,即可自然支持无障碍能力,但是在一些场景中,一个功能上完整的UI对象可能是由若干个更小的UI组件组合而成的。若每一个小的UI组件都可以获焦并朗读,则会造成信息冗余和效率降低。同时由于可聚焦的组件过多过细,也会影响触摸浏览时走焦的性能体验。此时需要将多个控件设置为一个组,通过对组设置朗读标签,达到整组播报的效果。 ## 相关权限 不涉及 ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。 3. DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。 4. HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。