Android TalkBack:是否有监听器可以捕获所有辅助功能事件?

时间:2017-05-30 19:04:12

标签: android talkback android-accessibility

背景:问题是什么

我的应用程序有一个单词的首字母缩写,让我们假设它是

  

ABC

当我使用谷歌的语音服务时,它会读出很棒的字母

然而,当我使用三星语音(S语音)时,它会将其读出为1个单词并不是很棒!

那么为什么不设置内容说明?

ABC出现在许多地方,设置替代内容描述是不可行的。此外,它可以打破其他语音服务的内容描述,这些服务正确地读出来,就像Google的那个

一样

我的计划

所以我有一段时间有一个问题,我找到了这个很好的方法 对于扩展<li> <div class="dropdown"> <a href="#" style="color:#fff;line-height:60px;margin:0 10px" id="dLabel" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Modules <span class="caret"></span> </a> <ul class="dropdown-menu" aria-labelledby="dLabel"> <c:forEach items="${listmodule }" var="m"> <li><a href="./PFEaction?action=<%=m%>">${m}</a></li> </c:forEach> </ul> </div> </li> ViewGroup的类。 总而言之,此方法允许您在处理之前捕获onRequestSendAccessibilityEvent以某种方式对其进行修改。除此之外,您还可以获取要读取的内容描述并进行修改。

我的想法是获取当前使用的TTS或TalkBack服务引擎,并使用正则表达式编辑字母ABC的内容描述,如果是三星语音(S语音),则将其设为A B C.希望!

我的问题

任何人都知道听众或回调是为了在全局或通用情况下处理AccessibilityEvent吗? AccessibilityEvent仅适用于onRequestSendAccessibilityEvent。我找不到ViewGroup的替代方案。

任何人都知道如何捕获所有传入的Activity或者可能是我的问题的替代解决方案

感谢阅读!

2 个答案:

答案 0 :(得分:0)

没有无障碍事件/代表不适用于活动,他们也不需要。每个Activity都应该有一个根/内容视图,该视图是ViewGroup的一个实例。这对我来说很有效,可以过滤活动中的所有辅助功能事件:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    View contentView = findViewById(android.R.id.content);

    contentView.setAccessibilityDelegate(new View.AccessibilityDelegate(){
        @Override
        public boolean onRequestSendAccessibilityEvent(ViewGroup host, View child, AccessibilityEvent event) {
            Log.wtf("Event: " + event.toString());
            return super.onRequestSendAccessibilityEvent(host, child, event);
        }

    });

}

我还要指出,TalkBack支持按字符导航的功能,而这样的解决方案可能解决了TalkBack用户不会将问题视为问题的问题。事实上,在某些情况下,这可能会被视为更糟糕。每当您更改内容时,残疾人与实际内容相比您都必须非常谨慎地进行更改。即使公告更清晰:

"ABC" != "A B C"

例如,在不同的情况下,可以将此行为视为&#34;功能&#34;像:

"NASA" 

这种天真的实现可能仅仅是为了#LowerCase&#34;所有内容描述或在所有大写字母之间添加空格。显然,这些解决方案中的每一个都会产生不同类型的问题。

我的观点是,如果屏幕上的内容令人困惑,TalkBack使用户能够按角色导航。各种平台上的AT用户将习惯于#qu; quarks&#34;他们的平台。通过使用上述解决方案之一,您可以强制使用不同的夸克。有时候,最容易获得的解决方案就是让"ABC" == "ABC",让AT用户自己解决问题。

如果您不打算在#34;理想&#34;中修复所有字符串?具体来说,最好不要把事情单独放在一边。尽管如此,最好的情况是正确考虑这两个问题以及哪种解决方案最适用于该方案。

我喜欢覆盖内容描述的一些例子,可能会被正则表达式或字符串匹配捕获。对此的一个很好的实现是发现这些特定的场景并通过REGEX修复它们 - &gt;字符串字典用&#34;替换&#34;到文本或内容描述属性,并将其设置为新的内容描述。

"OFF" -> "off" //This one is super dumb on Google's part. "OFF" shows up on every switch in the OS!
"ON" -> "on" //See above comment.
"NASA" -> "nasa"
etc.

请注意,在我的字典中,我总是朝着这个词而不是单个角色公告:)。原因是,我没有改变字符串的性质。或者更确切地说,在每个方面都有以下几点:

oldString.equalsIgnoreCase(newString);

现在将字符串定位添加到等式中......这确实是一个非常复杂的问题。也许只留下一件事是最好的选择。

答案 1 :(得分:0)

您也可以使用 ViewCompat 委托。事实上,上述解决方案对我不起作用。

=IIf(Fields!Zscore.Value = "0", "Blue","Gainsboro")