跳到主要内容

Android 在线状态订阅与正在输入

qxj-im-core 为 Android 端同样提供完整的 用户在线状态订阅 (Presence) 与 “对方正在输入 (Typing)” 支持。


1. 用户在线状态订阅 (Presence)​

1.1 订阅、取消订阅与查询​

// 1. 订阅指定用户在线状态(userIDsJson 格式: ["u_1002","u_1003"])
// 返回 JSON 数组: [{"userID":"u_1002","status":1,"platformIDs":[1,5]}]
val statusListJson = callIMCore { cb ->
Open_im_sdk.subscribeUsersStatus(cb, opId(), "[\"u_1002\",\"u_1003\"]")
}

// 2. 取消订阅
callIMCore { cb ->
Open_im_sdk.unsubscribeUsersStatus(cb, opId(), "[\"u_1002\"]")
}

// 3. 查询所有已订阅用户的在线状态
val allSubJson = callIMCore { cb ->
Open_im_sdk.getSubscribeUsersStatus(cb, opId())
}

1.2 监听在线状态实时变化​

在 OnUserListener.onUserStatusChanged(userOnlineStatus: String?) 中接收实时推送:

override fun onUserStatusChanged(userOnlineStatus: String?) {
// JSON 示例: {"userID":"u_1002","status":1,"platformIDs":[2]}
}

2. “对方正在输入”状态 (Typing)​

2.1 发送正在输入焦点状态 (changeInputStates)​

// 用户在输入框输入文字时传 focus = true(Go 内核自带 10 秒防抖节流)
// 用户清空输入框、发送消息或退出页面时传 focus = false
callIMCore { cb ->
Open_im_sdk.changeInputStates(cb, opId(), conversationID, focus)
}

2.2 监听对方正在输入状态变化​

在 OnConversationListener.onConversationUserInputStatusChanged(change: String?) 中接收:

override fun onConversationUserInputStatusChanged(change: String?) {
// JSON 示例: {"conversationID":"si_u1_u2","userID":"u_1002","platformIDs":[1]}
// 当 platformIDs 非空时表示对方正在输入;当 platformIDs 为空数组 [] 时表示对方已停止输入
}