我已经被困在这个问题上有一段时间了.
我有一个用来读取屏幕内容的AccessibilityService。其中一些内容被隐藏在ListView中。如果我在AccessibilityService上启用TouchExplorationMode并触摸listView中的项目,就可以看到内容。
但是,如果启用此功能,则所有单次触摸手势都将作为悬停手势拾取。我发现您不能以编程方式启用和禁用此选项。有没有办法将鼠标悬停事件转换回触摸事件?
我找到了这个converting hover to touch using Views。然而,我需要相同的东西,但从一个没有视图的AccessibilityService。
提前谢谢你。
发布于 2017-02-26 09:04:40
在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"
.../>注意:我已经删除了很多脚手架和其他基本属性,将其归结为使其正常工作所需的最低设置。显然,这些文件还有其他重要的方面!
https://stackoverflow.com/questions/42231679
复制相似问题