感谢「珍惜」同学投稿,也热烈欢迎其他同学来投稿,分析是一种快乐,也是一种精神!
现在很多应用有一些需求需要获取监听微信消息,然后做一些事情,有的会把当前微信聊天信息直接同步到服务端进行分析用户行为,这么做可能为了更好的用户体验,但是这样是很不安全的对于用户来说,因为微信官方都说不会保存用户聊天信息的,不过本文单纯从技术讨论一下有没有免Root进行操作,当然Root之后就不多说了方法太多了。
第一种:通过辅助功能和截图功能
因为是免root所以用到的东西全都是系统api做出来的效果下面说一下具体实现原理,本功能主要用到了AccessibilityService+MediaProjectionManager+文字识别。
第一、辅助功能AccessibilityService无障碍类最初的设计理念是帮助残疾人的但是在国内被做成黑科技 ,比如自动抢红包,自动安装 app,等一些实现场景,这个类可以对每个APP进行监听获取一些view的控件信息!
第二、MediaProjectionManager这个是5.0以上谷歌开放的API主要功能就是截图当然需要用户开启权限!
在这之前读者们可以百度看看这几个相关的API,网上的帖子说的都很不错,不然的话看下面可能会有一些吃力,如果想做到消息同步就首选要确认的是用户是否发送了消息?笔者之前寻思用发送按钮的监听方式 进行get 消息处理,但是发现如果这样的话不可以对对方发送的消息进行获取。
也是想了很久,后来发现一件事,我可以对微信聊天页面的ListView 的事件进行监听操作, 在AccessibilityService里面有一个方法可以处理每个 View 各种事件比如单机长按滑动状态变更等,都有很明确的记录,我只需要做到当聊天页面的ListView 的控件进行滑动监听即可获取 有人发送了消息因为微信聊天页面整体是一个ListView (可以通过 DDMS查看对应的控件节点信息 )可以通过DDMS 的方式拿到对应控件信息如下图所示:
拿到指定的信息以后通过AccessibilityService 提供的 findAccessibilityNodeInfosByViewId(ID)或者ByName方式拿到对应的控件, 返回的是一个List<AccessibilityNodeInfo&g