发现第一个方法似乎就直接发请求了,看来只要调用到这里,就是可以领红包了。那最初又是如何来这里的呢?我们搜索对PasswdRedBagManager内这两个方法的引用找到BaseChatPie.java:
public PasswdRedBagManager f25190a;
...
public class EnterForSend implements OnKeyListener, OnEditorActionListener {
...
// 这里从方法名判断是每次输入点击发送后调用
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
if (i != BaseChatPie.dr) {
return false;
}
String obj = this.a.f25220a.getText().toString();
if (obj.length() > 0) {
// 调用了外部类的下述方法
long[] a = this.a.a(obj);
// 再进行消息发送
SendMsgParams sendMsgParams = new SendMsgParams();
sendMsgParams.b = this.a.dL;
sendMsgParams.a = this.a.dJ;
sendMsgParams.c = this.a.dN;
sendMsgParams.f26863c = this.a.dL;
...
}
return true;
}
}
// 这里调用了那2个openPasswdRedBagxxx方法
public long[] m5613a(String str) {
long[] jArr = null;
// 非匿名模式才会继续尝试匹配口令红包,原来里里外外都做了判断
if (!AnonymousChatHelper.a().a(this.f25174a.a)) {
if (TextUtils.isEmpty(this.f25269d) || !str.equals(this.f25278e)) {
// 使用密码打开
jArr = this.f25190a.a(this.f25174a, str);
} else {
// 使用redPacketId直接打开
jArr = this.f25190a.b(this.f25174a, this.f25269d);
}
// 无意义的打log打点啥的,华丽丽地无视吧
if (jArr != null && jArr[s] == 1) {
this.f25269d = QunUppUploadTask.QunUppAppId;
this.f25278e = QunUppUploadTask.QunUppAppId;
this.f25228a.sendEmptyMessage(dz);
if (QLog.isColorLevel()) {
QLog.d(PasswdRedBagManager.a, u, "passwdredbags result[0]=" + jArr[s] + ",result[1]=" + jArr[t] + ",send str=" + str);
}
}
} else if (QLog.isColorLevel()) {
QLog.d(PasswdRedBagManager.a, u, "current is in Anonymous, dont search passwdredbags");
}
return jArr;
}
可见每次我们输入消息发送时,都发生了判断,会去查询是不是红包口令,如果是则直接发请求拿红包然后继续,否则直接当做普通消息继续发送。所以如果想要做自动抢红包的话,其实只要直接在收到消息时,调用PasswdRedBagManager的open方法即可,连模拟UI、生成请求、发送消息都不用了,我们再也不用昧着良心说口令了。顺便我们还看到了手机QQ确实喜欢用Activity,这里的红包弹框也是一个单独的Activity,而且请求是发送到手Q红包那边去的,看来还分业务线。










