【QQ-Xposed】QQ常用接口、API、监听方法笔记

记录一些常用的 API、接口,旨在帮助Xposed 开发者们更快速地开发出关于 QQ 的模块,当前 QQ 版本:8.5.5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.tencent.mobileqq.activity.ChatActivityFacade;

// 这里只列出所有第三方类
import com.tencent.mobileqq.app.QQAppInterface;
import com.tencent.mobileqq.activity.aio.SessionInfo;
import com.tencent.mobileqq.activity.ChatActivityFacade$SendMsgParams;
import com.tencent.mobileqq.data.AtTroopMemberInfo;
import com.tencent.mobileqq.data.ArkAppMessage;
import com.tencent.mobileqq.structmsg.AbsStructMsg;

/**
* 调用这个方法来发送文本消息
*
* @param QQAppInterface 是什么我也不知道,但 AppRuntime 是它的子类,又因为 QQ 的 com.tencent.common.app.BaseApplicationImpl 里面有一个静态函数 getApplication(),而 BaseApplication 有一个成员函数 getRuntime(),所以,这个参数不是问题,直接传入 AppRuntime 即可
* @param SessionInfo 消息接受者
* @param String 文本内容
* @param ArrayList 被艾特的列表
*/
public static void a(QQAppInterface, Context, SessionInfo, String, ArrayList<AtTroopMemberinfo>, SendMsgParams)

/**
* 调用这个方法来发送 JSON 消息
*
* @param SessionInfo 接受者
* @param ArkAppMessage 消息。先 <code>new ArkAppMessage()</code>,然后通过成员函数 <code>fromAppXml(String)</code> 来设置内容
*/
public static boolean a(QQAppInterface, SessionInfo, ArkAppMessage)

/**
* 调用这个方法来发送 XML 消息
*
* @param AbsStructMsg 消息。调用静态方法 <code>public static boolean com.tencent.mobileqq.structmsg.TestStructMsg.a(String)</code>来创建
*/
public static void a(QQAppInterface, SessionInfo, AbsStructMsg)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.tencent.mobileqq..app.MessageHandlerUtils;

// 这里只列出所有第三方类
import com.tencent.mobileqq.app.QQAppInterface;
import com.tencent.mobileqq.data.MessageRecord;

/**
* 收到消息的时候会调用
* <br />
* 警告:收到消息的时候会调用这个方法多次,所以,请像下面这样调用:
* <br />
* <code>
* class Hook extends XC_MethodHook {
* private List<long> msgDone = new List<long>();
* public void afterHookedMethod(MethodHookParam p) {
* MessageData msg = MessageData.getMessage(p);
* if (msgDone.contains(msg.uid)) return;
* // ...
* }
* class MessageData {
* long uid;
* // ...
* public MessageData getMessage(MethodHookParam p) {
* MessageData data = new MessageData();
* data.uid = Utils.getField(p.args[1].class, "msgUid", Long.TYPE).get(p.args[1]); // getField 是一个外界函数,根据类和名字和类型,返回一个属性(Field)
* }
* }
* }
* </code>
*
* @param MessageRecord 消息的数据,包括:发送者、消息 ID、发送的群聊、消息内容等
*/
public static boolean a(QQAppInterface, MessageRecord, boolean)

未完待续……