Accessibility,即辅助功能,许多Android用户有不同的能力(限制)。这些限制包括视力、肢体、年龄等,这些限制可能会阻碍他们看到或充分使用触摸屏,而用户的听力丧失,有可能会让他们无法感知声音信息和警报信息。Android系统提供了辅助功能的特效和服务,可以帮助这些用户更容易的使用他们Android设备,这些功能包括语音合成、触觉反馈、手势导航、轨迹球和方向键导航等。Android应用程序开发人员可以利用这些服务,使他们的应用程序更贴近用户的真实情况。该辅助服务在后头工作,由系统调用,用户界面的一些状态(比如Button被点击了)的改变可以通过回调Accessibilityserver的相应方法来通知用户。
当一个View被点击的时候,系统会先调用当前View已设置的mOnClickListener对象的onClick(view)方法,然后再调用sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED)内部方法。在sendAccessibilityEvent(int eventType)方法的内部实现里,其实是调用mAccessibilityEvent(int eventType)方法的内部实现里,其实并传入当前View对象和AccessibilityEvent.TYPE_VIEW_CLICKED参数。所以,只需要代理View的mAccessibilityDelegate对象。当一个View被点击时,在原有mOnClickListener对象的相应方法执行之后,我们就能收到这个点击的“消息”。代理mAccessibilityDelegate对象之后,我们就能拿到当前被点击的View对象,从而可以加入自动埋点的逻辑,进而实现插入埋点代码的效果。
以自动采集Button的点击事件为例,详细介绍该方案的实现步骤:
第一步: