原文链接:https://blog.csdn.net/to35998642/article/details/86236018

(1)辅助功能工具方法如下:

/*** 辅助功能相关检查的帮助类*/
public class AccessibilityUtil {private static final String ACCESSIBILITY_SERVICE_PATH = AccessibilitySampleService.class.getCanonicalName();/*** 判断是否有辅助功能权限*/public static boolean isAccessibilitySettingsOn(Context context) {if (context == null) {return false;}int accessibilityEnabled = 0;try {accessibilityEnabled = Settings.Secure.getInt(context.getApplicationContext().getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED);} catch (Settings.SettingNotFoundException e) {e.printStackTrace();}String packageName = context.getPackageName();final String serviceStr = packageName + "/" + ACCESSIBILITY_SERVICE_PATH;
//        AccessibilityLog.printLog("serviceStr: " + serviceStr);if (accessibilityEnabled == 1) {TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':');String settingValue = Settings.Secure.getString(context.getApplicationContext().getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);if (settingValue != null) {TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;splitter.setString(settingValue);while (splitter.hasNext()) {String accessabilityService = splitter.next();if (accessabilityService.equalsIgnoreCase(serviceStr)) {return true;}}}}return false;}/*** 打开辅助功能界面,需找到对应app点击打开即可*/public static Intent getAccessibilitySettingPageIntent(Context context) {// 一些品牌的手机可能不是这个Intent,需要适配return new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);}
}

(2)AccessibilityService服务不需要把注册写在代码里,将注册写在AndroidManifest.xml中,系统在读到程序需要此服务的时候就会自动注册到服务中,如下:

(3)由于AccessibilityService服务权限较大,所以需要手动启动,启动后,之后程序没有异常关闭(比如崩溃),服务就会一直处在开启状态,就算是关机重启,服务也是开着的。

(4)AccessibilityService服务需要写一个xml配置文件,如图:

其中packageNames为需要监控的包名,只有写在这里的app才会被监控,其他的app不受监控,也就是说如果想用AccessibilityService服务来自动点击自己app的view,那么首先要把自己app的包名写在这里

(5)AccessibilityService服务可以获取到手机当前屏幕上的所有view,包括布局,但只是当前页面的,如果页面可能上下滑动,那么没有显示在页面上的部分AccessibilityService服务也同样获取不到,需要滑动后,让需要的内容显示在当前屏幕上,AccessibilityService服务才可以获取到。

(6)AccessibilityService服务可以通过AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();获取当前页面的布局,然后通过view = rootInActiveWindow.findAccessibilityNodeInfosByViewId(viewid);或者view = rootInActiveWindow.findAccessibilityNodeInfosByText(textname);来获取到需要的view,前者是通过view的id查找view,后者是通过view的text属性查找view,找到view后,就可以对view进行点击操作了,

需要注意:

1.获取到的view是个集合,有可能同意id有多个view,所以需要遍历view集合,找到需要的view在进行操作。

2.AccessibilityService服务可以对view进行点击操作,但是不能修改view的属性,如果view的Clickable属性是false,代表view不可点击,也不能通过AccessibilityService服务将Clickable属性改为true

(7)当view为不可点击时,可以通过clickview = clickview.getParent();找到view的父view,然后对父view进行判断并点击,如果父view还是不可点击,可以继续往上找,要是都不能点击,那就认栽吧,哈哈......

(8)有时候,需要的view不在当前屏幕上,需要滑动一下才行,这时候可以使用android7.0提供的方法进行滑动,如下图:

图中红框部分代表滑动的起始点和结束点,500为x轴的位置,start和stop为y轴的位置,由于是从下往上滑动屏幕,所以起始点的y比结束点的y要大,可以理解为把手放在500,1050的位置,然后滑动到500,413的位置,也就是垂直向上滑动了页面

(9)有时候会遇到AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow()为空的现象,而且是等多久获取都是空,这时候可以尝试下拉一下通知栏,这样做也等于是刷新AccessibilityService服务可以重新获取一下布局,方法如下:

其中expandStatusBar(Context ctx)方法是下拉方法,collapseStatusBar(Context ctx)是收回方法

(10)想要对view进行点击,可以用clickview.performAction(AccessibilityNodeInfo.ACTION_CLICK);

(11)想要点击物理回退键是,可以用performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);

(12)直接模拟点击坐标,测试代码如下

(13)在打开手机指针位置的情况下,辅助点击和MotionEvent.obtain点击效果不同:

辅助模式模拟点击和滑动会出现痕迹,MotionEvent.obtain无痕迹留下

Android 辅助功能 AccessibilityService(手机辅助功能)相关推荐

  1. 使用Android辅助功能AccessibilityService实现微信自动聊天【外挂插件】

    本文是使用Android辅助功能AccessibilityService实现微信自动聊天demo: 只是为了跟深入的了解Android辅助功能, 提高自身的动手能力. 请勿用于商用,或非法用途. 动手 ...

  2. android辅助抢红包,Android辅助功能AccessibilityService与抢红包辅助

    抢红包的原理都差不多,一般是用Android的辅助功能(AccessibilityService类)先监听通知栏事件或窗口变化事件来查找红包关键字然后去模拟点击或打开红包. 下面附上源码,程序已实现自 ...

  3. android如何实现微信功能吗,android 借助AccessibilityService实现模拟点击功能-微信助手(一)...

    下集预告: android 借助AccessibilityService实现模拟点击功能-几个工具类(二)发此文还是想分享一些自己在android模拟点击这块的收获和想法 为什么开发模拟点击? 这是一 ...

  4. 简单Android手机APP地图,android最简单手机地图APP(只需5分钟)

    android最简单手机地图APP--只有三部分. 第一部分 首先建立一个MapActivity在setContentView(R.layout.activity_map);中创建一个代码如下. [h ...

  5. Android杂谈---获取手机屏幕大小

    Android杂谈---获取手机屏幕大小 SurfaceView简单例子 玩转Android---UI篇---ZoomControls放大缩小图片 更多相关推荐 这里总结下android中关于手机屏幕 ...

  6. android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)

    这里总结下android中关于手机屏幕的相关操作: 1.获取屏幕的分辨率(因为android中处理显示的时候,需要根据屏幕分辨率的不同才去不同的布局或显示不同的素材) <uses-sdk and ...

  7. android 监听手机电量变化

    今天,简单讲讲如何监听手机电量的变化. 监听电量是不能静态注册的. 后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙. 不能静态注册的广播: and ...

  8. android 监听手机开机

    今天,简单讲讲  android 监听手机开机. 需求描述:有些时候,我们需要我们的程序在开机后能自动运行,在系统即将关闭时,能写入一些记录到指定的文件里. 一.开机广播监听: Android系统 ...

  9. android 解决小米手机上选择照片路径为null的问题

    之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码,解决了这个问题,这里记录一下. ...

  10. android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser

    android 从4.3系统开始可以连接BLE设备,这个大家都知道了.iOS是从7.0版本开始支持BLE.android 进入5.0时代时,开放了一个新功能,手机可以模拟设备发出BLE广播, 这个新功 ...

最新文章

  1. Java字节码instrument研究
  2. python入门教程 官方-Python自学入门?
  3. 工作中常用的linux命令,工作中常用的Linux命令
  4. 使用Powerdesigner的逆向工程生成PDM(主要是注释可以放进去)
  5. A4.2021年全国数学建模竞赛A题-赛题分析与评阅要点(FAST主动反射面的形状调节)
  6. 在wamp里面配置feehicms
  7. 微信小程序----实现YDUI的ScrollTab(滚动选项卡)
  8. python数字式时钟_数字时钟案例学习python函数及时间库
  9. 微信小程序把view居中_微信小程序view居中
  10. Linux架设代理服务器
  11. 程序猿生存指南-46 暴走的鸟
  12. 安装QQ的时候,页面显示创建文件夹失败,无法正常安装,请尝试选择新的安装目录
  13. 中国峰会速递|亚马逊云科技【DEV DAY】认知地图正式发布!
  14. java.lang.IllegalArgumentException: Unknown entity解决办法
  15. c#文件操作代码段保存
  16. 0x66 Tarjan算法与无向图联通性
  17. 美国股市暴跌,中国路在何方
  18. 虚拟机flink webui无法访问
  19. 基于Android的app公交查询论文,基于Android平台的公交查询系统的设计与实现.doc
  20. 12个体育运动LUTs调色预设包

热门文章

  1. pinpoint配置
  2. 贪吃小怪兽介绍之动画同步
  3. webform窗体控件禁用属性(Enable)注意事项
  4. 百面机器学习05-非监督学习
  5. python 支付宝 退款 demo(python-alipay-sdk)
  6. 在朋友圈分享美食,卖美食教程也算是个项目
  7. java 二维数组排序
  8. Python logging 模块的 dictConfig
  9. 高考2021数学成绩查询,部分省份公布高考查分时间 2021各省高考查分时间汇总
  10. html5数据超出显示省略号,h5文字超出,两行显示,超出显示省略号