代码没什么好说的了,按照我们之前说的三个步骤来就可以了,但是这里需要注意点细节上的问题:
1、我们在监听到通知栏的消息的时候,调用如下代码来进行通知栏的消息点击
if (content.contains("[微信红包]")) {
//模拟打开通知栏消息
if (event.getParcelableData() != null
&&
event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentIntent;
try {
pendingIntent.send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
}
2、我们在模拟点击通知栏消息之后,还是需要监听:AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 这个事件,这个事件我们以后会经常用到,这个事件就是在窗口发生改变的时候发出来的事件,很常用的,比如我们可以通过这个事件来监听TopActivity,然后得到包名,这也是一个实现应用锁的一个原理。
3、我们在查找领取红包的时候,模拟点击的时候做了一个工作,就是从“领取红包”文本的控件View网上查找,查找到一个可以点击的View出来,然后模拟点击
if(info.getText() != null){
if("领取红包".equals(info.getText().toString())){
//这里有一个问题需要注意,就是需要找到一个可以点击的View
Log.i("demo", "Click"+",isClick:"+info.isClickable());
info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
AccessibilityNodeInfo parent = info.getParent();
while(parent != null){
Log.i("demo", "parent isClick:"+parent.isClickable());
if(parent.isClickable()){
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
break;
}
parent = parent.getParent();
}
}
}
这里为什么这么做,其实原理很简单,因为我们不知道微信他的界面布局,也不知道他对哪个View进行了setOnClickListener。我们可以写一个例子,performAction方法只对调用了setOnClickListener方法的View模拟点击才有效,其实看View的源码也是可以看出来的.这里就不多解释了。所以我们就需要得到一个View节点之后,从下往上找,直到找到一个可以click的View为止。










