我在设备上的两个不同应用程序中有两个辅助功能服务.他们每个人都对其他应用程序有一些看法.我面临以下问题:当启用2个辅助功能服务时,只有一个绘制视图,另一个不会获得任何事件.
事件配置如下:
@Override
protected void onServiceConnected() {
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK;
info.notificationTimeout = TIMEOUT_IN_MS;
setServiceInfo(info);
super.onServiceConnected();
}
Run Code Online (Sandbox Code Playgroud)
我可以在前Lollipop Android版本上重现它,也可以在Android M上重现.在Android O和N上,所有服务都可以正常工作.
有人可以向我解释它是如何发生的,也许从Android N开始有一些改进吗?如果有办法让它们同时工作,你能不能给我一个实现呢?
我正在努力实现一个AccessibilityService.我在下面分享了我的代码.当我从设置菜单打开我的辅助功能服务然后onServiceConnected()被调用但onAccessibiltyEvent()根本没有被调用.请指导我这个.
清单文件中的服务声明.
<service
android:name=".MyAccessibilityService"
android:enabled="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
Run Code Online (Sandbox Code Playgroud)
XML文件
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:canRequestFilterKeyEvents="true"
android:accessibilityFlags="flagDefault"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
/>
Run Code Online (Sandbox Code Playgroud)
MyAccessibiltyService.java
public class MyAccessibilityService extends AccessibilityService {
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.d(TAG,"Service Connected");
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
System.out.println("Event Occurred");
Log.d(TAG, "onAccessibilityEvent: event=" + event);
AccessibilityNodeInfo nodeInfo = event.getSource();
if (null == nodeInfo) return;
}
@Override
public void onInterrupt() {
Log.d(TAG,"Accessibility Interrupted" );
} …Run Code Online (Sandbox Code Playgroud) android accessibility accessibility-api accessibilityservice android-accessibility
我目前正在使我的应用程序可访问,我的EditTexts有问题:
在每个EditText中,用户的输入在某个时刻被验证(例如,在按下按钮之后),如果输入无效,我会显示错误editText.setError("message").问题是如果TalkBack打开,它将不会自动聚焦并读取错误.此外,由于我无法得到错误的视图,我不能要求TalkBack通过它来关注它sendAccessibilityEvent.
我会很感激有关如何在仍然使用时解决此问题的任何想法editText.setError().
编辑1为@Abhishek V解决方案添加了代码:
public class BaseEditText extends EditText {
...
...
@Override
public void setError(CharSequence error) {
super.setError(error);
announceForAccessibility(error);
}
}
Run Code Online (Sandbox Code Playgroud) android accessibility textview talkback android-accessibility
我已经尝试adb shell settings put secure enabled_accessibility_services com.android.talkback/com.google.android.marvin.talkback.TalkBackService过从 adb shell 启用对讲的命令。它正在切换表示对讲状态的 ui 按钮,但实际上并没有启用对讲。我正在尝试以编程方式为 android 6.0 启用对讲。有没有其他彻底的方法可以启用它?
settings automation accessibilityservice talkback android-accessibility
我正在使用自定义视图作为Android上的按钮,它不会继承android.widget.Button.告诉辅助服务这是一个按钮的最佳方式是什么?
只是打电话setClickable(true)给视图就够了吗?
使用标准Button,TalkBack附加单词"按钮"作为提示,但使用自定义视图它不会这样做.我应该在某处添加单词"button"作为提示吗?
在iOS上,我会在视图中添加一个"trait"按钮,而VoiceOver会将其作为按钮进行宣传.Android上有类似的东西吗?
android accessibility accessibilityservice talkback android-accessibility
我AccessibilityService在 Android 7 上使用。可以AccessibilityEvent通过调用getEventTime(). 根据文档,此方法“获取发送此事件的时间”。
有人知道返回值getEventTime()是指什么吗?它似乎不是 Unix 时间。
我按照以下文档创建了一个 AccessibilityService:https : //developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
我认为没有必要在此处复制代码,因为我一步一步地完成了所有操作,并且它在我尝试过的所有模拟器上都可以正常工作(在 19-25 个 API 之间),但在我的真实设备上却无法正常工作(API 25) . 在真实设备上,永远不会调用 onServiceConnected 方法。这是我拥有的唯一真正的设备。我可以尝试什么?什么会导致这个问题?
编辑:现在我已经在不同的真实设备(Android 4.4)上尝试过,它也适用。现在我真的很困惑。
我正在为我的应用程序使用AccessibilityService.问题是我需要手动从辅助功能设置启用它,有没有办法自动执行此操作,以便我的应用程序的用户不需要手动执行此操作?