专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
51好读  ›  专栏  ›  郭霖

企业微信自动打卡插件开发

郭霖  · 公众号  · android  · 2017-07-31 08:00

正文

今日科技快讯

近日中国多家VPN供应商已收到了来自苹果公司的通知,通知主要告知这些供应商和开发者,他们的软件将从中国区App Store下架。对此苹果方面表示,工信部今年早些时候宣布,所有提供VPN服务的开发者必须获得政府的许可,我们被要求移除一些不符合新规定的VPN应用。苹果同时补充道:其它国家/地区的帐单地址的用户将能够继续从App Store中访问这些软件。

作者简介

新的一周开始了,很高兴又跟大家见面了!

本篇来自 splm 的投稿,分享了如何实现公司微信自动化打卡,本文只是分析了技术,并不赞同实际使用!

思考

需求不容赘述,能找到这个文章的人,估计都心怀鬼胎,哈哈,只希望大家能够从技术的角度看待这个插件,切忌不要做“不好”的事情,年纪都不小了,应该做到是非分明。最后再警告大家,严格律己,遵守公司规章制度。

  • 自动打卡,究竟如何自动化?

实现自动化,定要模拟用户操作,单击,长按,触摸等事件,那么....没错,就需要臭名昭著的 AccessibilityService。

  • 打卡地点,究竟如何模拟?

1. Xposed框架 ,定位有三种方式,网络,基站和GPS,三者也有优先级,但也可简单粗暴直接拦截系统GPS定位,至于网络,基站定位都给 null。

2. 模拟器 ,主流的模拟器可以模拟地理位置,开发期间推荐使用模拟器进行调试;

多说一句使用 Xposed 框架,功能异常强大,但调试起来比较烦,虽说自带日志,但时不时就需要来次重启,着实有点闹心。所以在开发过程中,模拟地理位置,只是其中一环,所以为了不影响开发,可以先用模拟器去模拟地理位置,待到打卡功能完善了后再考虑定位的事情,毕竟这由涉及到了 Xposed 插件开发。

开发

了解API

至于 AccessService 如何配置,构造配置这个就不多说了,不是本文重点。如果不会,可以参考这个:

微信抢红包插件

http://blog.csdn.net/dd864140130/article/details/51794318

继承了 AccessService 后,我们需要实现 onAccessibilityEvent 方法,这个方法的意思就是在触发了事件进行回调,至于你想捕捉何种事件,详情参考API,这里只列举在本例使用到的事件:

  • AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED: 当通知栏发生变化时,也就是当有新通知显示在通知栏时触发;

  • AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: 当窗体发生改变时触发,Activity,Fragment 的切换都会触发;

除此之外我们还需要关注 AccessibilityNodeInfo 实例的重要方法:

  • findAccessibilityNodeInfosByText: 根据文本查找控件,可能会得到一个集合;

  • findAccessibilityNodeInfosByViewId: 根据ID查找控件,会比较精准;

了解WXUI的构造

首先自己去搞一个企业WX的测试账号,成功登录后会进入如下界面:

了解代码

打卡功能是在工作台下的,所以需要先进入打卡模块,但这一系列操作都手动点击就失去了自动化的意义了,因此 AccessService 第一次介入,代码如下:

上述代码就能自动点击工作台按钮,这个代码是我们的核心部分。关于 findTagToClick() 是什么?等下介绍,先说几个需要注意的地方:

这是最重要的,如果想要一个控件响应单击事件,有几种办法?

1. OnClickListener

2. OnTouch() 处理 ActionDown 和 ActionUp 事件。

但重中之重就是该控件的属是 onClickable= true 的也就是可以被点击的,如果该属性为 false ,那么辅助服务不能执行单击事件,至少我遇到的是这样。我在开发自动点击工作台这个步骤时,心想只要通过文本内容,拿到指定控件,然后执行单击就可以了。但结果怎样?没有任何反应,原因肯定就是控件没有接收事件,这是我遇到的第一个问题。

多说一句,为何 setOnClickListener 后就看见单击了?

setClickable(true) 原因就在这里。

怎么知道控件是否能响应点击呢?有两个方案:

1. 写递归,判断 node 是否能被点击,如果可以则执行,否则则向上传递,听起来有点像 touch 事件分发的流程;

2. 使用IDE自带工具, Android devic monitor 来看当前 Activity 的UI层级,进入的步骤,以 A.S 为例:Tools->Android->Android Device Monitor。

简单介绍一下 使用 Android Device Monitor 分析UI结构:







请到「今天看啥」查看全文


推荐文章
乐趣微生活  ·  美女打瞌睡,不笑你打我【NO5】
8 年前
砺剑  ·  为什么我们把印度叫阿三?
8 年前
PChouse家居APP  ·  时髦又放纵的60年代伦敦老宅大改造
8 年前
读万卷书聚正能量  ·  人为什么要善良?
7 年前