今天我们来做apk自动安装和微信自动添加好友。自动安装功能我们需要监听每个手机的安装app包名,安装app包名是下载好apk后手机系统会默认打开文件进入安装界面的应用,也就是说这个安装界面也是属于某个应用的,那么它必须有一个包名,大部分手机的安装包名都是:com.android.packageinstaller,剩下的还有一些不同的,所以我们监听的包名要有多个包名:com.lenovo.security,com.lenovo.safecenter.
现在我们配置AccessibilityService,如果你对AccessibilityService这个不熟悉的话可以先看看 《AccessibilityService详解》 。

apk自动安装执行步骤:
1.配置监控安装应用:com.android.packageinstaller、com.lenovo.security、com.lenovo.safecenter
2.界面调用时候回调onAccessibilityEvent,在onAccessibilityEvent这个函数我们要执行安装流程,首先执行下一步或继续安装,执行安装,执行打开
3.流程到执行打开流程后将文件删除

[java] view plaincopy
  1. public class IAccessbilityService extends AccessibilityService {
  2. // 大多数的手机包名一样,联想部分机型的手机不一样
  3. private String[] packageNames = { "com.android.packageinstaller", "com.lenovo.security", "com.lenovo.safecenter" };
  4. /**
  5. * 此方法是accessibility service的配置信息 写在java类中是为了向下兼容
  6. */
  7. @Override
  8. protected void onServiceConnected() {
  9. super.onServiceConnected();
  10. AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo();
  11. // 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等)
  12. mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
  13. // 反馈给用户的类型,这里是语音提示
  14. mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
  15. // 过滤的包名
  16. mAccessibilityServiceInfo.packageNames = packageNames;
  17. setServiceInfo(mAccessibilityServiceInfo);
  18. }
  19. @Override
  20. public void onAccessibilityEvent(AccessibilityEvent event) {
  21. installApplication(event);
  22. }
  23. @Override
  24. public void onInterrupt() {
  25. }
  26. /**
  27. * 查找关键字并执行点击按钮的操作
  28. *
  29. * @param event
  30. */
  31. private void installApplication(AccessibilityEvent event) {
  32. if (event.getSource() != null && isContainInPackages(event.getPackageName().toString())) {
  33. // 点击“下一步”节点
  34. findNodesByText(event, "下一步");
  35. // 点击“继续安装”节点
  36. findNodesByText(event, "继续安装");
  37. // 点击“安装”节点
  38. findNodesByText(event, "安装");
  39. // 点击“打开”节点
  40. findNodesByText(event, "打开");
  41. }
  42. }
  43. /**
  44. * 判断包名
  45. *
  46. * @param str
  47. *            当前界面包名
  48. * @return
  49. */
  50. private boolean isContainInPackages(String str) {
  51. boolean flag = false;
  52. for (int i = 0; i < packageNames.length; i++) {
  53. if ((packageNames[i]).equals(str)) {
  54. flag = true;
  55. return flag;
  56. }
  57. }
  58. return flag;
  59. }
  60. /**
  61. * 根据文字寻找节点
  62. *
  63. * @param event
  64. * @param text
  65. *            文字
  66. */
  67. private void findNodesByText(AccessibilityEvent event, String text) {
  68. List<AccessibilityNodeInfo> nodes = event.getSource().findAccessibilityNodeInfosByText(text);
  69. if (nodes != null && !nodes.isEmpty()) {
  70. for (AccessibilityNodeInfo info : nodes) {
  71. if (info.isClickable()) {// 只有根据节点信息是下一步,安装,完成,打开,且是可以点击的时候,才执行后面的点击操作
  72. if (text.equals("打开")) {
  73. File file = new File(Environment.getExternalStorageDirectory() + "/mxtheme/mxtheme.apk");
  74. if (file.exists()) {
  75. file.delete();
  76. } else {
  77. info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }

这个类主要的作用是当服务被打开后调用onServiceConnected函数然后setServiceInfo设置监听窗口的信息与包名

[java] view plaincopy
  1. private String[] packageNames = { "com.android.packageinstaller", "com.lenovo.security", "com.lenovo.safecenter" };
  2. @Override
  3. protected void onServiceConnected() {
  4. super.onServiceConnected();
  5. AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo();
  6. // 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等)
  7. mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
  8. // 反馈给用户的类型,这里是语音提示
  9. mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
  10. // 过滤的包名
  11. mAccessibilityServiceInfo.packageNames = packageNames;
  12. setServiceInfo(mAccessibilityServiceInfo);
  13. }

监听到安装包被安装的时候就会被调用onAccessibilityEvent这个函数

[java] view plaincopy
  1. @Override
  2. public void onAccessibilityEvent(AccessibilityEvent event) {
  3. installApplication(event);
  4. }

接下来是操作apk安装,流程是:点击下一步或点击继续安装->点击安装->点击完成->打击打开应用

[java] view plaincopy
  1. if (event.getSource() != null && isContainInPackages(event.getPackageName().toString())) {
  2. // 点击“下一步”节点
  3. findNodesByText(event, "下一步");
  4. // 点击“继续安装”节点
  5. findNodesByText(event, "继续安装");
  6. // 点击“安装”节点
  7. findNodesByText(event, "安装");
  8. // 点击“打开”节点
  9. findNodesByText(event, "打开");
  10. }

当点击打开节点时则表示安装已完成那么我们应该要把apk删除

[java] view plaincopy
  1. if (text.equals("打开")) {
  2. File file = new File(Environment.getExternalStorageDirectory() + "/mxtheme/mxtheme.apk");
  3. if (file.exists()) {
  4. file.delete();
  5. }
  6. }
源码下载
https://github.com/chenhongxin/AccessbilityProject

使用AccessibilityService带你自动安装软件以及自动添加微信好友相关推荐

  1. 计算机自动安装程序,如何防止软件自动安装软件?防止电脑自动安装软件的方法...

    一般在网上下载软件,一个不小心这些捆绑的软件蜂拥而至.说出来你可能不信,小编下载一个软件带过五六"毒瘤"软件,电脑直接卡死重启,毒瘤软件还难卸载...你遇到过这种情况吗?对于这些毒 ...

  2. win10自动安装软件

    情况描述:笔记本自己下载软件,卸载程序后,再次开机联网状态下又会自动安装软件,还会出现一系列的垃圾弹窗和广告. 解决办法:第一步:电脑管家--软件管理--卸载   第二步:右键卸不掉的软件找到文件安装 ...

  3. Acer传奇Go电脑开机自动安装软件卡死怎么重装系统?

    Acer传奇Go电脑开机自动安装软件卡死怎么重装系统?一些用户在网络上下载安装了一些恶意软件之后,导致电脑中了病毒.每次开机联网之后,有很多的软件就会自动开始下载,占满你的桌面,这个情况导致电脑直接卡 ...

  4. windows10 设置禁止电脑自动安装软件,安装软件时会有提示

    禁止电脑自动安装软件的方法: 1.打开本地组策略编辑器,找到windows设置: 2.依次打开安全设置.本地策略.安全选项: 3.在本地安全设置中,设置[同意提示]即可. 本文操作环境:windows ...

  5. 怎么阻止流氓软件在电脑里自动安装软件?

    用户要注意,可能一不小心就会在电脑中安装了带有流氓软件的程序或软件,最令人头疼的是流氓软件还会自动在电脑上安装软件,有什么办法可以禁止流氓软件在电脑里自动安装软件吗?下面就来看看详细的方法. 操作方法 ...

  6. 电脑中毒了老是自动安装软件怎么办

    在使用电脑的时候,如果你发现你的电脑自动安装软件或者一些垃圾文件,删除了后又自动下载安装的话,那很有可能是因为电脑中毒了.那么遇到这种情况怎么办呢?今天小编就给大家分享下电脑中毒了老是自动安装软件的解 ...

  7. 计算机安装电脑程序怎么办理,电脑一开机就自动安装软件怎么办

    <电脑一开机就自动安装软件怎么办>由会员分享,可在线阅读,更多相关<电脑一开机就自动安装软件怎么办(2页珍藏版)>请在人人文库网上搜索. 1.电脑一开机就自动安装软件怎么办分步 ...

  8. 电脑中病毒自动安装软件怎么解决

    如果在一些不知名的网站或者来源不明的渠道下文件的话可能会造成电脑中病毒等情况发生.最近就有网友反映自己的电脑中病毒自动安装软件怎么办,严重影响电脑的正常使用.下面小编就教下大家电脑中病毒自动安装软件的 ...

  9. Win10怎么禁止自动安装软件

    很多朋友在刚刚使用新电脑的时候,经常会去下载一些软件,但老是被捆绑下载了很多莫名其妙的软件,怎么解决这个问题呢,那就是禁止电脑自己安装软件,每次安装软件前都要询问一下自己,下面我来给大家介绍Win10 ...

最新文章

  1. 转载:sql2005 管道的另一端上无任何进程解决方法
  2. proe输入数字时成双出现_罗斯蒙特温度变送器3144P单只和双只输入输出的的含义...
  3. Java中的门面设计模式,非常有用!
  4. 20051020:该办宽带了
  5. 挖洞技巧:任意账号密码重置
  6. 【职场】职场上给的期权是什么,重要吗?
  7. react 手指移开_代码简介:React的五个死亡手指
  8. 【51nod - 1087】 1 10 100 1000(找规律推公式,水,map)
  9. JavaScript仿淘宝智能浮动
  10. Windows7修改hosts提示:您没有权限在此位置中保存文件
  11. 英语听力采用计算机化考试,高考英语复习资料及听力机考特点与应对建议
  12. 学习笔记:Qt程序打包发布
  13. php去除首尾符号,PHP如何去除头尾字符
  14. RabbitMQ应用案例
  15. 头歌平台数据可视化-第五关时间空间数据的可视化——等高线图
  16. 进制转换(进制转换)
  17. Android SDK proxy代理加速
  18. 25.java中IO流的应用---缓冲流、转换流以及对象流过程(附讲解和练习)
  19. 黑马程序员——基础学习
  20. php输出函数是什么,PHP输出函数

热门文章

  1. 技术计算机软件系统,人教版信息技术七上《计算机软件系统》PPT课件.ppt
  2. Springboot+vue 体质测试数据分析#毕业设计
  3. ms_17_010漏洞利用
  4. [BZOJ]1324: Exca王者之剑
  5. 人教版计算机英语单词,人教版初中英语单词总表(完美打印版).pdf
  6. GIT小乌龟回滚版本和merge版本
  7. Android room清空表,Android Room 实现简单的增删改查(一)
  8. 实施工程师的发展前景_证书“不值钱”?监理工程师迎大改,未来前景到底如何?...
  9. 基于asp.net的篮球俱乐部管理系统
  10. FDA认证辅导,美国FDA新规对电子烟做了哪些规定