HarmonyOS鸿蒙NEXT应用元服务开发标注屏幕朗读内容的场景

HarmonyOS鸿蒙NEXT应用元服务开发标注屏幕朗读内容的场景 控件包含显示文本(text)、无障碍文本(accessibilityText)2个属性,其中,显示文本为用户界面上呈现的信息,无障碍文本为无障碍专有的朗读信息,不在界面上显示。屏幕朗读提取信息进行朗读时无障碍文本的优先级大于显示文本,即当无障碍文本不为空时,会朗读无障碍文本,否则朗读显示文本。

所以:

对于文本类控件,尽量使用显示文本来表达信息,使视障用户和视力健全用户可以获取到相同的信息。

对于文本类控件,如果除显示文本外,还额外提供了颜色等视觉效果为视力健全用户提供了更多信息的场景,可采用无障碍文本为视障用户提供更多的信息用于朗读。

对于非文本类控件,可采用无障碍文本为视障用户提供朗读信息。

accessibilityText() 设置无障碍文本。聚焦button时朗读效果为:"按钮, Accessibility text"。
export struct Rule_2_1_1 {
  title: string = 'Rule 2.1.1';
  shortText: string = 'Button';
  longText: string = 'Accessibility text';

  build() {
    NavDestination() {
      Column() {
        Blank()
        Button(this.shortText)
          .accessibilityText(this.longText)
          .align(Alignment.Center)
          .fontSize(20)
        Blank()
      }
      .width('100%')
      .height('100%')
    }
    .title(this.title)
  }
}

本文主要引用官方文档材料基 API 12 Release


更多关于HarmonyOS鸿蒙NEXT应用元服务开发标注屏幕朗读内容的场景的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙NEXT应用元服务开发标注屏幕朗读内容的场景的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙NEXT应用元服务开发中,标注屏幕朗读内容的场景主要涉及无障碍服务功能的实现。通过使用AccessibilityService,开发者可以为视障用户提供屏幕内容的语音反馈。具体实现步骤如下:

  1. 服务配置:在config.json中声明无障碍服务,设置accessibility权限,并配置服务的intent-filter

  2. 服务实现:继承AccessibilityService类,重写onAccessibilityEvent方法,监听屏幕内容变化,并通过AccessibilityNodeInfo获取节点信息。

  3. 内容标注:使用AccessibilityNodeInfogetText方法获取文本内容,结合TextToSpeech将文本转换为语音输出。

  4. 事件处理:在onAccessibilityEvent中处理不同类型的事件,如TYPE_VIEW_CLICKEDTYPE_VIEW_FOCUSED等,确保用户操作时及时反馈。

  5. 生命周期管理:在onServiceConnected中初始化资源,在onDestroy中释放资源,确保服务稳定运行。

代码示例:

class MyAccessibilityService extends AccessibilityService {
    private tts: TextToSpeech;

    onServiceConnected() {
        this.tts = new TextToSpeech(this, (status) => {
            if (status === TextToSpeech.SUCCESS) {
                this.tts.setLanguage(Locale.CHINESE);
            }
        });
    }

    onAccessibilityEvent(event: AccessibilityEvent) {
        const source = event.getSource();
        if (source) {
            const text = source.getText();
            if (text) {
                this.tts.speak(text.toString(), TextToSpeech.QUEUE_ADD, null, null);
            }
        }
    }

    onDestroy() {
        if (this.tts) {
            this.tts.stop();
            this.tts.shutdown();
        }
        super.onDestroy();
    }
}

通过以上步骤,开发者可以实现屏幕朗读内容的标注,提升应用的无障碍体验。

回到顶部