android - 在 AccessibilityService 中检索 TYPE_TOUCH 和 TYPE_GESTURE
问题描述
我正在开发一个应用程序,它应该收集用户与 Android 设备的交互(触摸相关数据),类似于这个 SO post。
我已经尝试了所有答案的建议方法,从带有和不带WATCH_OUTSIDE_TOUCH
标志的应用程序覆盖开始。getevent
方法对我来说也不是一个选择,因为它需要根或外部存储(如答案所述)。
所以我创建了一个AccessibilityService
,现在我能够检测到这样的事件:VIEW_CLICKED
, VIEW_SCROLLED
. 但是,在我遇到的文档中,还有GESTURE_DETECTION_START
,和. 我想用它们来衡量交互时间。不幸的是,尽管有正确的(?)配置,我的服务根本没有检索到这些事件。我当前的配置如下:GESTURE_DETECTION_END
TOUCH_INTERACTION_START
TOUCH_INTERACTION_END
AndroidManifest.xml:
...
<service
android:name=".accessibility.MyAccessibilityService"
android:label="@string/accessibility_service_label"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityervice"
android:resource="@xml/accessibility_config" />
</service>
...
可访问性_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:description="@string/accessibility_service_description"
android:notificationTimeout="5"
android:summary="@string/accessibility_service_description" />
总而言之,我的服务正在正确启动和检索一些事件,但它缺少手势和触摸开始/结束事件。我尝试了许多其他配置,包括启用的所有功能和标志,但没有任何效果。我也尝试覆盖一个方法AccessibilityService::onGesture
,但它从未被调用过。此事件是否仅在触摸探索模式下可用?
我已经描述了我的问题可能有点过于宽泛,但我将不胜感激任何帮助或建议,即使与 AccessibilityService 方法不严格相关。
解决方案
经过一番挣扎后,我发现了问题(或一系列问题):
- 我的
accessibility_config.xml
文件无效,因为它包含<?xml version="1.0" encoding="utf-8"?>
标签,并且根据文档
此元数据必须引用包含 <accessibility-service> 标记的 XML 资源
所以我推断它需要这个并且只有这个标签才能正常工作。
GESTURE_DETECTION_START
、GESTURE_DETECTION_END
和是仅在触摸探索模式下可用的事件TOUCH_INTERACTION_START
。TOUCH_INTERACTION_END
所以android:canRequestTouchExplorationMode="true"
并且android:accessibilityFlags="flagRequestTouchExplorationMode"
在我的配置中丢失了。文档在Exploration types下列出了这些事件。
编辑:共享最终accessibility_settings.xml
文件:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeViewTextChanged|typeViewFocused|typeViewLongClicked|typeViewClicked|typeViewScrolled|typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackHaptic"
android:accessibilityFlags="flagIncludeNotImportantViews"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
android:notificationTimeout="10"
android:settingsActivity="org.example.ExampleActivity" />
推荐阅读
- ssl - 从 DER 文件中提取私钥
- powerbi - Power BI - 比较行级别的数据并连接其他列中的相应数据以获得相同的记录
- angular - 无法绑定到“ngIf”,因为它不是已知属性
- javascript - 图像未加载到反应中
- javascript - 道具。不是函数
- django - Django Rest Framework 在 URL 中传递文件路径
- python - Azure Python 函数。逐行读取 Blob
- python - 如何从嵌套字典中获取键?
- python - 如何在 python telebot 中将一条大消息拆分为不同的行?
- javascript - 使用钩子使用 onChange 设置状态