所以SeekBar我的应用程序中有一个,我正在使用 Android 的 TalkBack 功能。当SeekBar滚动时,设备提示“(机器人:视contentDescription),SeekBar控件,50%”。是否可以更改它,使其显示实际值(从 -4 到 +4),例如“SeekBar 控件,负 4”?
正如这里提到的,我可以打开 Android 辅助功能设置页面;我知道我可以使用以下代码直接打开我的应用程序辅助功能设置:
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Run Code Online (Sandbox Code Playgroud)
但是我如何在Android中启动我自己的APP的辅助功能设置页面?我想将用户直接引导到我的应用程序辅助功能设置页面以授予权限。
我不想使用 adb 并且我无法根植我的设备。我找不到任何可行的解决方案;有什么建议?
android accessibility accessibility-api accessibilityservice android-accessibility
我正在为盲人社区开发一个Android应用程序.在我的应用程序中,我正在使用TTS /音频文件处理所有水龙头/触摸.它工作正常,但当用户打开TalkBack功能时,所有水龙头/触摸都被指定两次.首先,它将由TalkBack和我的内部机制决定.
我能够检测到TalkBack是否已启用.
public boolean accessibilityEnable(Context context) {
boolean enable = false;
Log.e("Reached before function", "yes");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
try {
AccessibilityManager manager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
List<AccessibilityServiceInfo> serviceList = manager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
Log.e("Reached before for loop", "yes");
for (AccessibilityServiceInfo serviceInfo : serviceList) {
String name = serviceInfo.getSettingsActivityName();
if (!TextUtils.isEmpty(name) && name.equals(TALKBACK_SETTING_ACTIVITY_NAME)) {
enable = true;
Log.e("Reached after if loop", "yes");
}
}
Log.e("Reached after for loop", "yes");
} catch (Exception e) {
Log.e("Error", "Error aaya re");
}
}
return enable; …Run Code Online (Sandbox Code Playgroud) 背景:有什么问题
我的应用程序有这个词的首字母缩写词让我们假设它是
美国广播公司
当我使用 Google 的语音服务时,它会读出很棒的字母
但是,当我使用三星语音(S 语音)时,它会读出 1 个单词,这不是很好!
那么为什么不设置内容描述呢?
ABC出现在很多地方,设置替代内容描述是不可行的。它也可能会破坏其他语音服务的内容描述,这些服务可以像谷歌一样正确读出
我的计划
所以,我有一个问题了一段时间回来,我发现对于扩展类这个伟大的方法,ViewGroup这是onRequestSendAccessibilityEvent。综上所述,这个方法可以让你AccessibilityEvent在处理之前捕获一个以某种方式修改它。除其他外,您还可以获取要读取的内容描述并对其进行修改。
我的想法是获取当前正在使用的 TTS 或 TalkBack 服务引擎,并使用正则表达式编辑字母 ABC 的内容描述,如果是三星语音(S 语音),则将其设为 ABC。希望!
我的问题
任何人都知道AccessibilityEvent在全局或通用情况下处理的侦听器或回调函数吗?
onRequestSendAccessibilityEvent仅用于ViewGroup. 我找不到Activity.
任何人都知道如何捕获所有传入AccessibilityEvent或可能是我问题的替代解决方案
谢谢阅读!
Android 9 引入了accessibilityHeading标签,可以通过对讲使用它来宣布标题。
https://developer.android.com/about/versions/pie/android-9.0#a11y
寻找 Heading-based navigation
在我的应用程序中,我的活动中有多个文本视图和一些标题
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:accessibilityHeading="true"
android:text="Accessibility Heading 1"
android:textColor="#000000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="Message"
android:textColor="#000000" />
Run Code Online (Sandbox Code Playgroud)
但是当我运行该应用程序时,标题仅被视为普通的文本视图,并且Talkback.
我可以向左滑动以浏览所有元素。可以选择向上滑动以更改对讲公告的模式。例如Default,Links,Controls,Headings等。
选择 时Headings,我希望对讲仅宣布标题并从一个标题跳到另一个标题,但即使在Swipe Left或Swipe Right手势之后它也保持在同一位置。
android accessibility screen-readers talkback android-accessibility
我在junitTest中使用uiautomator,在“@BeforeClass”我初始化一个UiDevice:“”mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 首先我完成了一个测试,然后我再次开始测试,我得到一个错误:java.lang.IllegalStateException:UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@7478d40alreadyregistered!
@RunWith(AndroidJUnit4.class)
public class DailyInstrumentedTest {
@BeforeClass
public static void beforeTest(){
try {
mUIDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); //??device??
}
}
@Test
public void test(){}
}
Run Code Online (Sandbox Code Playgroud) android accessibility android-uiautomator android-accessibility
我是Android辅助功能的新手- TalkBack。我知道诸如之类的基本内容contentDescription,importantForAaccessibility以及它们如何构成节点树等。
在我的问题中,我想将可访问性的重点转移RecyclerView到某些操作上的第一个元素上。
通常someView.requestFocus()还是someView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)可以的。但这似乎并没有按预期工作RecyclerView。
我试图通过以下方法解决它:
android:accessibilityLiveRegion="polite"但它只会宣布该列表在那里。但这并不会影响可访问性。
通过集中适配器的第一个元素-这样做是一个坏主意!
除此之外,android:accessibilityTraversalAfter并且android:accessibilityTraversalBefore也不能很好地与Android的列表视图工作。
someView.requestFocus()
someView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
Run Code Online (Sandbox Code Playgroud) android accessibility talkback android-recyclerview android-accessibility
我们的目标是获得可与之交互的观点立刻(可以单击现在有什么东西会发生)。如果该视图通常可见且可单击,但已被另一个视图/菜单/侧面板悬停,则应将其省略。
语音访问可以做到这一点。它似乎使用了Accessibility API。
完美的例子是Google地图的底部菜单。展开后,下方的“沿路线搜索”按钮仍然可见,但应用未突出显示。
我已经通过的所有参数看上去AccessibilityNodeInfo一样isVisibleToUser(),isClickable(),isContextClickable(),isSelected(),isFocusable(),isFocused(),isAccessibilityFocused()和按钮具有相同的参数时,底部菜单被折叠/展开。用户可见,可聚焦和可点击。
我研究了隐藏的API,没有发现任何有用的东西。
我想念的是什么?
android accessibility accessibility-api accessibilityservice android-accessibility
我有一些TextView我想在 Talkback 模式下作为标题或链接宣布的 s。目前,它只是宣布 .html 文件中的文本TextView,但我希望它之后说“标题”,或者根据TextView. 例如,我希望 Talkback 模式宣布“登录 - 标题”而不仅仅是“登录”。
到目前为止我所尝试的是在我的Activity's 中添加这个onCreate():
ViewCompat.setAccessibilityDelegate(v, new AccessibilityDelegateCompat() {
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
super.onInitializeAccessibilityNodeInfo(host, info);
info.setHeading(true);
}
});
Run Code Online (Sandbox Code Playgroud)
在 Talkback 模式下,没有变化 - 它仍然只是宣布“登录”。
我注意到这个方法onInitializeAccessibilityNodeInfo被多次调用。当我在调试器中逐步执行时,每次触发此方法时,它都显示isHeading()为 false,然后设置为 true。
我是否错误地使用了这种方法?为什么要调用很多次?为什么info.setHeading(true)基本被忽略?
我将如何完成类似的事情,但对讲模式宣布“标签 - 链接”而不是标题?
我正在开发一个色盲应用程序,我想知道是否可以使用 Android 中的辅助功能更改 textView 的文本颜色。另外,我想使用辅助功能更改 textSize。
我可以做这些事情吗?,如果是,怎么做?