使用AccessibilityService带你自动安装软件以及自动添加微信好友
2016-07-10 01:57
501 查看
今天我们来做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.流程到执行打开流程后将文件删除
这个类主要的作用是当服务被打开后调用onServiceConnected函数然后setServiceInfo设置监听窗口的信息与包名
当点击打开节点时则表示安装已完成那么我们应该要把apk删除
现在我们配置AccessibilityService,如果你对AccessibilityService这个不熟悉的话可以先看看《AccessibilityService详解》。
apk自动安装执行步骤:
1.配置监控安装应用:com.android.packageinstaller、com.lenovo.security、com.lenovo.safecenter
2.界面调用时候回调onAccessibilityEvent,在onAccessibilityEvent这个函数我们要执行安装流程,首先执行下一步或继续安装,执行安装,执行打开
3.流程到执行打开流程后将文件删除
public class IAccessbilityService extends AccessibilityService { // 大多数的手机包名一样,联想部分机型的手机不一样 private String[] packageNames = { "com.android.packageinstaller", "com.lenovo.security", "com.lenovo.safecenter" }; /** * 此方法是accessibility service的配置信息 写在java类中是为了向下兼容 */ @Override protected void onServiceConnected() { super.onServiceConnected(); AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo(); // 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等) mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; // 反馈给用户的类型,这里是语音提示 mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; // 过滤的包名 mAccessibilityServiceInfo.packageNames = packageNames; setServiceInfo(mAccessibilityServiceInfo); } @Override public void onAccessibilityEvent(AccessibilityEvent event) { installApplication(event); } @Override public void onInterrupt() { } /** * 查找关键字并执行点击按钮的操作 * * @param event */ private void installApplication(AccessibilityEvent event) { if (event.getSource() != null && isContainInPackages(event.getPackageName().toString())) { // 点击“下一步”节点 findNodesByText(event, "下一步"); // 点击“继续安装”节点 findNodesByText(event, "继续安装"); // 点击“安装”节点 findNodesByText(event, "安装"); // 点击“打开”节点 findNodesByText(event, "打开"); } } /** * 判断包名 * * @param str * 当前界面包名 * @return */ private boolean isContainInPackages(String str) { boolean flag = false; for (int i = 0; i < packageNames.length; i++) { if ((packageNames[i]).equals(str)) { flag = true; return flag; } } return flag; } /** * 根据文字寻找节点 * * @param event * @param text * 文字 */ private void findNodesByText(AccessibilityEvent event, String text) { List<AccessibilityNodeInfo> nodes = event.getSource().findAccessibilityNodeInfosByText(text); if (nodes != null && !nodes.isEmpty()) { for (AccessibilityNodeInfo info : nodes) { if (info.isClickable()) {// 只有根据节点信息是下一步,安装,完成,打开,且是可以点击的时候,才执行后面的点击操作 if (text.equals("打开")) { File file = new File(Environment.getExternalStorageDirectory() + "/mxtheme/mxtheme.apk"); if (file.exists()) { file.delete(); } else { info.performAction(AccessibilityNodeInfo.ACTION_CLICK); } } } } } } }
这个类主要的作用是当服务被打开后调用onServiceConnected函数然后setServiceInfo设置监听窗口的信息与包名
private String[] packageNames = { "com.android.packageinstaller", "com.lenovo.security", "com.lenovo.safecenter" }; @Override protected void onServiceConnected() { super.onServiceConnected(); AccessibilityServiceInfo mAccessibilityServiceInfo = new AccessibilityServiceInfo(); // 响应事件的类型,这里是全部的响应事件(长按,单击,滑动等) mAccessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; // 反馈给用户的类型,这里是语音提示 mAccessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; // 过滤的包名 mAccessibilityServiceInfo.packageNames = packageNames; setServiceInfo(mAccessibilityServiceInfo); }监听到安装包被安装的时候就会被调用onAccessibilityEvent这个函数
@Override public void onAccessibilityEvent(AccessibilityEvent event) { installApplication(event); }接下来是操作apk安装,流程是:点击下一步或点击继续安装->点击安装->点击完成->打击打开应用
if (event.getSource() != null && isContainInPackages(event.getPackageName().toString())) { // 点击“下一步”节点 findNodesByText(event, "下一步"); // 点击“继续安装”节点 findNodesByText(event, "继续安装"); // 点击“安装”节点 findNodesByText(event, "安装"); // 点击“打开”节点 findNodesByText(event, "打开"); }
当点击打开节点时则表示安装已完成那么我们应该要把apk删除
if (text.equals("打开")) { File file = new File(Environment.getExternalStorageDirectory() + "/mxtheme/mxtheme.apk"); if (file.exists()) { file.delete(); } }源码下载
相关文章推荐
- java微信公共帐号支付(JS支付)
- java微信分享config:invalid signature,自定义右上角菜单(只保留分享给好友和朋友圈)
- 微信支付的封装工具类,集成微信支付
- Android集成微信支付的出现-1等错误需要注意的要点
- 微信分享jssdk config:invalid signature 签名错误
- 关于微信第三方授权登陆 使用code获取token时返回40029
- 七个细节解决公众号运营中的问题 欣赏与转化是两回事
- iOS 微信支付,显示一个确定按钮的坑
- .net 微信开发 从基本配置到完整demo ( 一 )
- ShareSdk的第三方登录
- 微信语音连播的实现思路
- 微信转发朋友圈小视频
- 使用Glide模仿微信图片加载策略
- node.js 开发微信号
- 深度解剖|如何从0到1打造高粘度高价值的微信社群?
- 微信支付V3版本地签名统一下单android端详解
- 微信支付的坑
- 1.网页调取微信发送消息时,为什么安卓会发两次,ios只发一次?
- ViewPager的使用(实现微信左右切换页卡功能)
- 越狱相关六:iOS微信自动抢红包