问题标签 [talkback]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
6376 浏览

android - Android - 阻止 TalkBack 读取应用程序名称和当前方向

问题是我在启动活动时使用 TTS 读取长字符串消息,但 TalkBack 会自动读取中间的应用程序名称并剪切长字符串,非常烦人。

我想在每次启动活动时禁用 TalkBack 读取应用程序名称。删除其 android:label 属性不是一个可行的解决方案,因为该应用程序由其他人控制,而我无法控制它。

那么,我可以调用任何 API 来阻止 TalkBack 功能在启动应用程序时读取应用程序名称吗?

任何帮助将不胜感激。

提前非常感谢。

问候, 阿肖克

0 投票
1 回答
4208 浏览

android - Android无障碍viewPager读取两个视图

我正在使用 Talkback 读取 ViewPager 上的视图内容,它正在读取当前视图的内容和下一个视图的内容(不可见)。

例如

查看 1

TextView -> hi1 TextView -> bye1

视图2

TextView -> hi2 TextView -> bye2

对讲读取 hi1, hi2, bye1, bye2

我试图改变 pager.setOffscreenPageLimit() 的值,但它什么也没做,Talkback 总是读取当前视图和下一个视图,即使 OffScreenPageLimit 的值为 4(它应该读取接下来的 2 个视图)。

我发现的唯一信息是:https ://code.google.com/p/eyes-free/issues/detail?id=139

任何想法?

0 投票
1 回答
580 浏览

android - 为什么 localhost webview 内容在 Android 中不启用 TalkBack

在我的 Android 应用程序中,我在 WebView 中加载了 Web 内容。启用 TalkBack 功能后,webview 内容响应用户触摸并说出 webview 内容。但是当我在 WebView 中加载本地主机网站时,TalkBack 不响应用户触摸。它不讲 WebView 内容。如何为 localhost webview 内容启用 TalkBack?

0 投票
1 回答
2116 浏览

android - 使用 webview 和 TTS,而不考虑 TalkBack

我正在开发一个 Android webapp(一个使用 Android Studio 构建的应用程序,主要基于加载远程内容的单个 webview),旨在供视障人士使用。

标准的辅助功能,例如 Android 本身和 Talkback 提供的功能,对我的用例来说完全没用,因为这个应用程序旨在以完全非标准的方式使用,通过使用耳机按钮作为唯一的输入和语音文本作为输出。

该网络应用程序不适合非视障人士使用。为此,我们已经有了一个完全不同的 webapp 版本。但是,我确实希望将语音文本显示在屏幕上,主要用于测试/调试目的。

因此,我不需要也不想利用 Google Talkback,而我的 web 应用程序是使用从 JavaScript 调用的本机 TTS(以及 TTS 事件,例如话语结束、触发 JavaScript 代码)从头开始构建的,当 TalkBack 时已经可以正常工作了被禁用。

但是,我的应用程序将主要在用户确实具有辅助功能和启用 TalkBack 的手机上使用(或者可能是其他辅助功能扩展 - 希望不会,因为辅助功能框架几乎不存在标准化)。所以我需要防止它干扰我自己对 TTS 引擎的调用。

这非常复杂。另外,我需要它与 Android 2.x 到 4.x 兼容。

在较旧的 Android 版本上,问题相对较小,因为 TalkBack 不会将脚本注入到 webview 中,并且 webview 几乎是不透明的,其内容对 Talkback 是“不可见的”。

在较新的版本上,这是一场噩梦。Android 没有提供一种方法来简单地禁用应用程序的辅助功能,这很荒谬。AccessibilityManager.interrupt() 方法似乎不起作用,而且它实际上没有文档记录,所以我很难弄清楚我可以尝试以哪些方式使用它。

似乎没有任何关于注入脚本如何工作以及我如何尝试与它们交互的文档。

为了进一步解决问题,我读到自 4.4.something 以来,以前由 TalkBack 注入的脚本现在被其他东西取代,集成到 Web 引擎中,或类似的东西。因此,即使是我可以为 TalkBack 注入脚本找出的任何 hack,也可能不适用于最新版本。

当我的应用程序运行时,是否有一些解决方法/黑客可以从我的应用程序中完全禁用 TalkBack?有没有办法防止从 TalkBack 注入 javascript 代码(当系统启用脚本注入时)?(显然没有在我的 webview 中完全禁用 javascript,因为我确实使用自己的 javascript)是否至少有一些可用的这些脚本的文档?还是他们的代码?这样我至少可以尝试“愚弄”他们?有没有办法让网络视图的某些部分内容对 TalkBack “不可见”?

或任何其他建议,以便能够让我的应用程序自己调用 TTS,同时避免 Talkback 干扰它们,并在屏幕上呈现文本同时防止 TalkBack 与之交互?

0 投票
0 回答
193 浏览

android - 如何避免接近传感器在 TalkBack 处于活动状态时中断我自己的 TTS

我正在开发一个使用 TTS 说话的应用程序。

但是,它将在可能具有辅助功能和启用 TalkBack 的手机上使用,因为它旨在供视障人士使用。

问题(以及我正在努力解决的其他问题)是,如果启用了 TalkBack 使用接近传感器中断语音的选项,则接近传感器不仅会中断由 TalkBack 发起的语音,它还会中断由我自己的应用程序发起的 TTS 语音.

我该如何避免呢?(我很想从应用程序中完全禁用 TalkBack,但遗憾的是,这甚至是不可能的)

0 投票
1 回答
5471 浏览

android - 在 Android 中更改对讲所讲的文本

当 ImageView 通过可访问性获得焦点时,我正在尝试更改 TalkBack 宣布的文本。

Android 文档指出我们应该创建一个 AccessibilityDelegate,并覆盖 onPopulateAccessibilityEvent(我正在使用支持库,因为我也支持 GingerBread)

因此,我的代码如下:

当我在 imageview 上调用此函数时,已设置委托,但未读取修改后的文本。它只是读取原始内容描述。我是否做错了什么或遗漏了辅助功能?

单步执行代码,似乎添加了正确的文本,但语音文本仍然没有变化。

注意:上面是一个人为的例子,可以使用内容描述,但我想弄清楚为什么它在自定义视图上尝试之前不起作用。

0 投票
0 回答
169 浏览

android - Cordova:W / AccessibilityInjector:解析JS JSON对象时出错?

正在开发 Cordova (Phonegap) 应用程序。虽然在设备中启用了对讲(可访问性),但在阅读我的 web 视图 UI 元素时,我经常收到这些错误。但是相同的 UI 在 IOS 中运行良好。

0 投票
0 回答
609 浏览

android - 启用对讲的不可预测的触摸事件

我正在开发一个支持 Talkback 和 Explore By Touch 的 Android 应用程序,但是在使用自定义视图响应两指滚动时遇到了问题。

据我了解,在屏幕上按住两根手指并四处移动它们应该在自定义视图 onTouchEvent 方法中生成相同的触摸事件序列,就像在关闭 Talkback/Explore By Touch 的情况下使用单指一样。

当用户用两根手指触摸屏幕时,我希望看到一个 ACTION_DOWN 事件,然后是一系列 ACTION_MOVE 事件,最后是当他们停止触摸屏幕时的一个 ACTION_UP 事件。

这种情况有时会发生,但经常发生,将两根手指放在屏幕上时,我会收到一连串难以正确解释的事件。

为了尽可能多地减少代码,我编写了一个简单的示例应用程序,它只是一个使用 ADT 向导创建的基本 Android 应用程序,具有如下声明的单个自定义视图;

自定义视图旨在消耗所有通过的触摸事件并返回 true 以指示这一点,它还将所有事件复制到调试日志中,除了 ACTION_MOVE 以减少产生的调试日志量。它由以下布局实例化;

在启用 Talkback 和 Explore By Touch 的情况下运行此程序,然后将两根手指放在屏幕上,有时会向调试日志发出单个 ACTION_DOWN 事件,如下所示;

10-06 14:21:41.356: D/onTouchEvent(30151): MotionEvent { action=ACTION_DOWN, id[0]=1, x[0]=828.0, y[0]=744.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=23426762, downTime=23426762, deviceId=4, source=0x1002 }

这将是理想的,但是它有时会发出这个序列;

10-06 14:32:53.026: D/onTouchEvent(30151): MotionEvent { action=ACTION_DOWN, id[0]=1, x[0]=926.0, y[0]=607.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0,metaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=24098432,downTime=24098444,deviceId=4,source=0x1002 }

10-06 14:32:53.031: D/onTouchEvent(30151): MotionEvent { action=ACTION_CANCEL, id[0]=1, x[0]=1054.0, y[0]=801.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0,metaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=24098449,downTime=24098444,deviceId=4,source=0x1002 }

10-06 14:32:53.036: D/onTouchEvent(30151): MotionEvent { action=ACTION_DOWN, id[0]=1, x[0]=926.0, y[0]=608.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=24098444, downTime=24098444, deviceId=4, source=0x1002 }

这也不是问题,因为我可以在收到 CANCEL 时过滤掉第一个 DOWN 动作。出现问题的地方是当它发出大量这样的事件时;

10-06 14:20:47.681: D/onTouchEvent(30151): MotionEvent { action=ACTION_DOWN, id[0]=1, x[0]=697.0, y[0]=933.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0,metaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=23373092,downTime=23373092,deviceId=4,source=0x1002 }

10-06 14:20:47.731: D/onTouchEvent(30151): MotionEvent { action=ACTION_UP, id[0]=1, x[0]=697.0, y[0]=936.5, toolType[0]=TOOL_TYPE_FINGER, buttonState=0,metaState=0,flags=0x0,edgeFlags=0x0,pointerCount=1,historySize=0,eventTime=23373137,downTime=23373092,deviceId=4,source=0x1002 }

10-06 14:20:47.731: D/onTouchEvent(30151): MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=954.0, y[0]=643.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=23373137, downTime=23373137, deviceId=4, source=0x1002 }

10-06 14:20:47.736: D/onTouchEvent(30151): MotionEvent { action=ACTION_POINTER_DOWN(1), id[0]=0, x[0]=954.0, y[0]=643.0, toolType[0] =TOOL_TYPE_FINGER, id[1]=1, x[1]=696.0, y[1]=937.0, toolType[1]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=2 , historySize=0, eventTime=23373137, downTime=23373137, deviceId=4, source=0x1002 }

最初的 DOWN,UP,DOWN 序列混淆了更高级别的代码并被解释为点击事件。

任何成功实现自定义视图的人都可以通过启用 Talkback/Explore By Touch 实现支持两指滚动的自定义视图,能否说明我在哪里出错了?

0 投票
2 回答
1385 浏览

android - 与 TalkBack 集成

我是一名学生程序员,我的学位工作是为视障人士(包括盲人)确定触摸屏设备的一种输入法。我想让我的应用程序与 TalkBack 一起正常工作。但我完全不知道,该怎么做。我找到了可访问性包,但我不清楚它如何与 TB 集成。

0 投票
1 回答
789 浏览

android - 如何为 Android 创建与 Talkback 一起使用的自定义键盘

我们正在尝试在 Android 上为视障人士开发自定义键盘。创建键盘很容易,但我们不知道如何使其易于访问,例如与 TalkBack 交互。事实上,除了原生的谷歌键盘之外,我们还没有看到任何可以与 TalkBack 配合使用的自定义键盘。任何帮助将不胜感激。