我正在开发一个应用程序,它应该收集用户与安卓设备的交互(与触摸相关的数据),类似于这是如此的帖子。
我尝试了所有的答案建议的方法,从一个应用程序覆盖和没有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>
...accessibility_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方法没有严格的关系。
发布于 2018-06-05 19:32:33
经过一番挣扎后,我发现了问题(或一组问题)是什么:
accessibility_config.xml文件无效,因为它包含<?xml version="1.0" encoding="utf-8"?>标记,并且根据文档此元数据必须引用包含标记的XML资源。
因此,我扣除了它需要这个,只有这个标签才能正确工作。
GESTURE_DETECTION_START、GESTURE_DETECTION_END、TOUCH_INTERACTION_START和TOUCH_INTERACTION_END是只有在触摸探索模式下才能使用的事件。所以android:canRequestTouchExplorationMode="true"和android:accessibilityFlags="flagRequestTouchExplorationMode"在我的配置中丢失了。文档将这些事件登记在探测类型下。
编辑:共享最终的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" />https://stackoverflow.com/questions/50651083
复制相似问题