现在已经坚持了一段时间......
我有AccessibilityService
我用来阅读屏幕内容。其中一些内容隐藏在ListView
中。如果我在AccessibilityService
上启用TouchExplorationMode并触摸listView中的项目,我可以看到内容。
然而,如果启用此选项,则所有单个触摸手势都会被选为悬停手势。我发现您无法以编程方式启用和禁用此选项。有没有办法将悬停事件转换回触摸事件?
我发现了converting hover to touch using Views。但是我需要相同的东西,但是从没有视图的AccessibilityService
开始。
提前谢谢。
答案 0 :(得分:0)
您无法使用TouchExplorationMode直接将悬停事件传递到应用程序窗口。这不可能。但是,是什么让您认为您无法以编程方式启用和禁用TouchExplorationMode ???这将是错误的。这是你如何做到的。
public class YourA11yService extends AccessibilityService {
private void enableTouchExploration() {
AccessibilityServiceInfo info = mInstance.getServiceInfo();
info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;
mInstance.setServiceInfo(info);
}
private void disableTouchExploration() {
AccessibilityServiceInfo serviceInfo = mInstance.getServiceInfo();
serviceInfo.flags &= ~AccessibilityServiceInfo.FLAG_REQUEST_TOUCH_EXPLORATION_MODE;
mInstance.setServiceInfo(serviceInfo);
}
}
虽然您不需要触摸探索模式来查找此内容。只需在当前窗口内容中找到列表视图即可。为什么你必须触摸它才能访问它?
编辑: 的AndroidManifest.xml
...
<service
android:name=".A11yService"
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/service_config" />
<
...
ServiceConfig.xml(R.xml.service_config)
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
...
android:canRequestTouchExplorationMode="true"
android:accessibilityFlags="flagIncludeNotImportantViews"
.../>
注意:我已经删除了很多脚手架和其他基本属性,将其煮沸至最低设置以使其工作。显然,这些文件还有其他重要方面!