在Android中使用smack检索群组/ MUC聊天记录

时间:2020-08-21 11:07:01

标签: android xmpp openfire smack multiuserchat

我正在使用 Smack 4.3.4 android库。我在使用以下代码获取特定群组的聊天记录时遇到问题。但是它的返回值为0。但是,使用其他客户端网络可以看到很多消息。

private fun initGroupChatRoom(){
       val mucEnterConfiguration = multiUserChat?.getEnterConfigurationBuilder(nickname)!!
           .requestNoHistory()
           .build()

       try {
           if (!multiUserChat!!.isJoined) {
               multiUserChat?.join(mucEnterConfiguration)
           }
       }catch (e: Exception){
           Log.e("GrpChatAct","Join Error: "+e.toString())
       }

       multiUserChat?.addMessageListener(incomingMessageListener)
   }

private fun chatHistory(){
       CoroutineScope(Dispatchers.IO).launch {
           var mamManager = MamManager.getInstanceFor(multiUserChat)

           var result =  async {
               mamManager.enableMamForAllMessages()
               mamManager.queryMostRecentPage(jId, 70)
           }.await()
        Log.e("GrpChatAct","Total Messages: "+result.messageCount)
     }
}

我还尝试了MamManager的以下更改:

var mamManager = MamManager.getInstanceFor(mConnection)

mConnection 快速连接对象的地方。

但是,我仍然收到0条消息。

我遵循了this参考中的代码。

代码中有什么我想念的东西或我犯的错误吗?

1 个答案:

答案 0 :(得分:0)

使用以下代码获取特定群组的聊天记录

val multiUserChatManager = MultiUserChatManager.getInstanceFor(XmppChatConnection.instance?.connection)

 val multiUserChat = multiUserChatManager?.getMultiUserChat(mucJid)
                    val mamManager = MamManager.getInstanceFor(multiUserChat)
                    val mamQueryArgs = MamManager.MamQueryArgs.builder()
                            .limitResultsSince(endDate)
                            .setResultPageSize(1000000000)
                            .queryLastPage()
                            .build()
                    val mamQuery = mamManager.queryArchive(mamQueryArgs)
                    val messageList = mamQuery.messages