【问题标题】:Android - How to set an Accessibility Delegate on a Menu Item?Android - 如何在菜单项上设置辅助功能委托?
【发布时间】:2015-02-16 15:47:50
【问题描述】:

是否可以通过任何方式在菜单项上设置辅助功能委托?我的应用程序使用文本转语音,我想在 TalkBack 开始说出我的菜单项的内容描述(当菜单项获得辅助功能焦点时发生)之前执行一些自定义代码。否则,我应用的文字转语音将与 TalkBack 的文字转语音发生冲突。

更新: 我的应用程序从 WebView 中获取一个句子,突出显示它并使用 TTS 引擎读取它。当句子被说出时,onDone() 回调会启动相同的方法,但会针对下一个句子。

由于 TalkBack 和我的应用使用相同的 TTS 引擎,因此一次只允许说出一种话语。因此,我的应用程序正在逐句阅读其 WebView 句子,但随后用户将注意力集中在菜单项上,TalkBack 将阅读其描述。因为我的语音被打断了,onDone() 会被调用(onDone() 无法区分话语是完全说出还是简单地被打断),所以会调用 speakNextSentence(),即使我之前的句子可能只在两句后就被打断了字。 我想在触发菜单项的可访问性事件之前以某种方式将 isPaused 布尔值设置为 true。

private class ttsUtteranceListener extends UtteranceProgressListener {

    @Override
    public void onStart(String utteranceId) {
    }

    @Override
    public void onDone(final String utteranceId) {
        if (!isPaused) {   
            ...
            speakNextSentence();
            ...
        }
    }

    @Override
    public void onError(String utteranceId) {
    }

【问题讨论】:

  • 没有。你不能。至少,不是我相信你试图描述的方式。 Android 的 A11y API 不支持这种方式的委托。不过,如果您要多描述一下您的场景,可能会有其他解决方案。
  • 更新了一些代码

标签: android accessibility text-to-speech android-menu talkback


【解决方案1】:

除非小心处理,否则在 WCag 2.0 准则 2.2.2 下,您的应用所做的可能会被视为不可访问。

解决方案 1:根据本指南,处理这种情况的正确方法是为用户提供手动启动/停止/暂停内容的能力。这应该很容易实现。仅此一项就足够了,并且对于所有 3 个解决方案都是必需的。

解决方案 2:执行此操作的另一种方法是,当您检测到可访问性引擎处于活动状态时,不进行自己的语音合成。使用 ACCESSIBILITY_LIVE_REGION_POLITE 将您的 web 视图标记为 liveRegion。然后让对讲抓住你更新的 contentDescriptions,它应该包含当前突出显示的句子的文本。这让 TalkBack 的工作是确定何时宣布什么。这还有一个额外的好处,即即使您所在的区域处于活跃状态并提供了大量反馈,它也会以可预测的方式对 TalkBack 用户进行操作。因此,它不太可能违反 WCag 2.2.2,但您仍然应该小心!并且可能仍需要提供暂停内容的功能。

解决方案 3:Android MenuItem 并未实现所有无障碍 API 回调。例如,如果您的 MenuItems 是按钮,则解决方案是覆盖 onRequestSendAccessibilityEvent 并查找 TYPE_VIEW_ACCESSIBILITY_FOCUSED。但是 MenuItems 没有实现这个 API。因此,您可以编写自己的菜单,使用实现这些 API 的元素,并按照您想要的方式进行操作。不过,正如我之前提到的,我不推荐这种方法。这种方法很可能违反了 WCag 2.0 无障碍指南。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2017-03-01
    • 2022-01-12
    • 2022-11-02
    相关资源
    最近更新 更多