如何在Android中使用Accessibility收听点击并获取视图?

我想在我的Android应用程序中实现一个辅助function服务 ,它可以执行以下操作:

=>在任何应用中获取屏幕点击/点击。

=>获取点击/点击的视图。

最初我认为由于安全原因不可能这样做,但在做一些研究时我遇到了一个应用程序(本机剪贴板 ),它可以执行以下操作:

=>从任何应用程序检测EditText的点击

=>为那些EditText添加值(字符串)。

我也看到了谷歌的对讲 ,无论你点什么,它都会说话。 要说它,它需要跨应用程序访问视图(获取文本)。

这些应用程序显然使用“辅助function服务”来实现, 但我想知道如何实现它?

我主要为我需要实现的东西find教程或东西,但我正在努力寻找一些实现我的应用程序的辅助function服务。 我确实访问了Android官方文档,这对于像我这样的新手来说太技术了。 (我最初更愿意向Youtube,SO和教程网站学习)。 如果您可以指出我介绍其他一些涵盖这些内容的教程,那也很棒。

可访问性服务的文档记录很少,但我创建了一些辅助function服务样板代码,用于设置启动项目并记录基本回调。 我稍后会添加该链接,但是根据您的具体问题,我认为您需要关注的是一些代码。 脚手架,项目设置等我离开回购。

下面是onAccessibilityEvent回调。 您可以在此处收听不同types的活动,以及在大多数情况下抓取屏幕内容的最方便的位置。 但是,作为一种辅助function服务,您也不必等待活动。 您可以轻松地生成AsynTask并在某种间隔内抓住它。

 public void onAccessibilityEvent(AccessibilityEvent event) { CLog.d(event.toString()); switch (event.getEventType()) { //On Gesture events print out the entire view heirarchy! case AccessibilityEvent.TYPE_GESTURE_DETECTION_START: CLog.d(A11yNodeInfo.wrap(getRootInActiveWindow()).toViewHeirarchy()); case AccessibilityEvent.TYPE_VIEW_CLICKED: CLog.d(event.getSource().toString()); default: { //The event has different types, for you, you want to look for "action clicked" if (event.getSource() != null) { CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy()); } } } } 

我将为此指出一点配置,因为它非常重要。 辅助function服务最好通过Manifest文件连接到您的服务的XML文件进行配置。 该文件的内容是:

   

对你而言,重要的位是canRetrieveWindowContent="true"和`accessibilityEventTypes =“typeAllMask”’。 我喜欢的设计方面是确保您抓住所需的最小事件types集。 不同的辅助function事件报告了截然不同的结果。 例如,许多事件从getSource()返回“null”。 这会强制您为此添加大量filter,或冒空指针exception。 这很烦人。

您需要的最后一点是辅助function。 这使您可以模拟点击次数,长按次数并将文本添加到可编辑的文本视图中。 下面是允许您执行此操作的代码。

 public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo source = event.getSource(); if (source != null & event.getClassName().equals("android.widget.EditText")) { Bundle arguments = new Bundle(); arguments.putCharSequence(AccessibilityNodeInfo .ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "some value"); source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); } } 

https://github.com/chriscm2006/Android-Accessibility-Service-Boilerplate