Android中微信抢红包插件原理解析及开发思路

2019-12-10 19:08:02刘景俊

代码没什么好说的了,按照我们之前说的三个步骤来就可以了,但是这里需要注意点细节上的问题:

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为止。