利用无障碍服务自动获取微信号
前言
最近遇到一个需求,要求写一个小插件,能够自动在微信的页面弹出一个窗口,展示用户的相关信息(与我们公司有关的信息,方便运营快速了解用户信息)。
当时我第一反应是不可能,如果能够在别的app中获取对应的信息,那岂不是太不安全了。直到我知道了AccessibilityService
这个东西。
基本思路
利用AccessibilityService
服务来获取到微信页面的页面信息,并获取到用户的微信号,有了微信号一切都好办了。
由于获取用户好友微信号和获取本人微信号的方法相同,因此此篇文章主要介绍的是如何通过AccessibilityService
来获取本人的微信号。
过程
AccessibilityService是什么?
在你的手机更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们。
它的具体实现是通过AccessibilityService
服务运行在后台中,通过AccessibilityEvent
接收指定事件的回调。这样的事件表示用户在界面中的一些状态转换,例如:焦点改变了,一个按钮被点击,等等。这样的服务可以选择请求活动窗口的内容的能力。简单的说AccessibilityService
就是一个后台监控服务,当你监控的内容发生改变时,就会调用后台服务的回调方法。
如何创建一个AccessibilityService?
实现一个自己的AccessibilityService,需要继承AccessibilityService类,并至少实现onAccessibilityEvent和onInterrupt方法:
public class MyAccessibilityService extends AccessibilityService {
final String TAG = "MyAccessibilityService";
/**
* 当服务启动的时候会被调用
*/
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.d(TAG, "connected");
}
/**
* 监听窗口变化的回调
*/
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.d(TAG, event.getPackageName() + ""