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

问题描述

我正在使用 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参考中的代码

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

解决方法

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

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