代码工程地址:
AccessibilityBasedCapabilities: 本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 (gitee.com)
基于原生能力的无障碍模式
介绍
本示例基于系统提供的无障碍阅读能力,实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。
效果图预览
原生组件屏幕朗读:
创建说明:
- 在已创建工程的ets文件夹下创建accessibility文件夹,在该文件夹下创建AccessibilityExtAbility.ets文件,可在该文件中实现一些回调函数,并加入业务处理逻辑的调用,具体可参考src/main/ets/accessibility/AccessibilityExtAbility.ets代码。
- 在已创建的accessibility文件夹下创建AccessibilityManager.ets文件,用于存放业务逻辑代码,可参考src/main/ets/accessibility/AccessibilityManager.ets进行实现。
- 在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" } ] } ]
- 另外,配置信息中的accessibility_config为无障碍扩展服务的具体配置,需要在resources/base/profile/下新建accessibility_config.json文件,在该文件中声明此无障碍扩展服务具备的能力类型,根据业务功能合理声明能力类型,本案例中,需要如下声明:
{ "accessibilityCapabilities": [ "retrieve", "gesture", "touchGuide" ] }
使用说明:
- 打开设置->辅助功能->屏幕朗读->屏幕朗读选项。
- 打开屏幕朗读后,关键手势如下:
- 单击选择某个项目,双击确认选择。
- 返回桌面及桌面切换等原有的单指操作都需要换成两指操作。
- 下滑屏幕朗读下一项,上滑屏幕朗读上一项。
- 打开应用,下滑或上滑查看朗读情况。
工程目录
工程的目录结构
├──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组件都可以获焦并朗读,则会造成信息冗余和效率降低。同时由于可聚焦的组件过多过细,也会影响触摸浏览时走焦的性能体验。此时需要将多个控件设置为一个组,通过对组设置朗读标签,达到整组播报的效果。
相关权限
不涉及
约束与限制
- 本示例仅支持标准系统上运行,支持设备:华为手机。
- HarmonyOS系统:HarmonyOS NEXT Developer Beta1及以上。
- DevEco Studio版本:DevEco Studio NEXT Developer Beta1及以上。
- HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta1 SDK及以上。