Accessbility 又叫做辅助功能,是Android官方推出帮助身体不便或者操作不灵活的人来辅助操作的,也可以用来干一些别的事,比如自动抢红包啊,静默安装点击啊等已知或者未知的应用。出于某种需求,就研究了下这个功能的简单用法,先做一个模拟按钮点击的效果。
布局很简单,就不贴代码了,简单描述下,主界面就一个按钮,id随便你取,在Activity中设置点击事件,弹出一个Toast。

步骤
  1. 创建CheckAccessbilityServices:
    CheckAccessbilityServices 继承自AccessibilityService,并在清单文件applcation节点中配置,并加入权限

                                            

    2.在res目录下创建文件夹xml,并创建步骤一中check_accessibility_config.xml

        

    这里面有一些常用的属性,简单介绍下
    android:accessibilityEventTypes=”typeAllMask”
    看属性名也差不多可以明白,这个是用来设置响应事件的类型,typeAllMask当然就是响应所有类型的事件了。当然还有单击、长按、滑动等。
    android:accessibilityFeedbackType=”feedbackSpoken”
    设置回馈给用户的方式

      android:notificationTimeout="100"

    响应时间的设置就不用多说了
    android:packageNames=”com.notrace”
    可以指定响应某个应用的事件,我的demo包名就叫com.notrace,可以多个,用”,”隔开。
    android:description=”模拟点击”

描述你在系统辅助功能开关中看到的描述

3.CheckAccessbilityServices 实现onAccessibilityEvent和onInterrupt方法

                @Override              public void onAccessibilityEvent(AccessibilityEvent event) {                        //过滤包名                      String pkgName = event.getPackageName().toString();                          if(!"com.notrace".equals(pkgName))                            return;                    switch (type){                            case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:                            //切换页面的时候此时会触发一个叫TYPE_WINDOW_STATE_CHANGED的事件                        AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();                        if(nodeInfo!=null)  {                                            if("com.notrace.MainActivity".equals(event.getClassName())){                                    List     list=                                nodeInfo.findAccessibilityNodeInfosByViewId("com.notrace:id/btn_click");                          if(list!=null&&list.size()>0)  {                                  list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);                                  }                              }                              break;                      case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:                        break;                  }                                }  

注意这里有个叫com.notrace:id/btn_click的,就是前面的那个按钮,我取id叫btn_click,这个东西可以通过eclipse提供的一个工具dump查看,如下图:

微信抢红包的界面你就可以这么看了。
list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); 就是模拟点击事件

至此,模拟点击就已经全部完成了,我们打开手机辅助功能界面会看见:

点击进去:

打开这个开关就可以了。
至此,当页面切换到MainActivity中就可以弹出toast了,至于别的奇奇怪怪的功能,就需要小伙伴们自己摸索了。
Demo代码

更多相关文章

  1. 在Android(安卓)Studio自己的项目中使用GitHub开源库
  2. mac 系统开发android,真机调试解决方式(无数的坑之后吐血总结)
  3. 侧滑回退的layout(类似IOS侧滑回退到上一个activity)
  4. android事件分发机制原理源码分析详解
  5. android使用遥控器模拟鼠标拖拽操作
  6. 在Android中访问内置SE和基于SE的卡模拟(一)
  7. android解析xml文件的方式之SAX方式
  8. android 实现一个按钮按下时总触发一个事件
  9. Android学习笔记(36):Android的两种事件处理方式

随机推荐

  1. AndFire防火墙1.2版本发布
  2. Android中各种onTouch事件
  3. android之simpleAdaper应用
  4. Android跳转到系统Wifi界面的方式
  5. Android防止进程被第三方软件杀死
  6. android加载进度条
  7. Android(安卓)Studio Mac 下卸载与安装
  8. Android(安卓)划出一个半透明的PopupWind
  9. Android(安卓)获取几天后的时间
  10. android 4.3源码编译