安卓开发之XMPP的简单使用

不废话了,直接开始,导包:

implementation "org.igniterealtime.smack:smack-android-extensions:4.3.0"
implementation "org.igniterealtime.smack:smack-tcp:4.3.0"
implementation 'org.igniterealtime.smack:smack-im:4.3.0'
implementation 'org.igniterealtime.smack:smack-android:4.3.0'

使用:

package com.airiche.ymlworkingspace

import android.os.Bundle
import android.util.Base64
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import org.jivesoftware.smack.*
import org.jivesoftware.smack.filter.StanzaTypeFilter.MESSAGE
import org.jivesoftware.smack.packet.Message
import org.jivesoftware.smack.packet.Stanza
import org.jivesoftware.smack.tcp.XMPPTCPConnection
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration
import org.jivesoftware.smack.util.TLSUtils


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        SmackConfiguration.DEBUG = true;
        val config = XMPPTCPConnectionConfiguration.builder()
        config.setUsernameAndPassword("2", "12345678")
            .setXmppDomain("xxx.net")
            .setConnectTimeout(30000)

        var mBuild =
            TLSUtils.acceptAllCertificates(
                TLSUtils.disableHostnameVerificationForTlsCertificates(
                    config
                )
            ).build();

        val conn2: AbstractXMPPConnection = XMPPTCPConnection(mBuild)
        conn2.replyTimeout = 30000
        var runnable = object : Runnable {
            override fun run() {
                try {
                    conn2.connect().login()
                } catch (e: Exception) {
                    Log.e("TAG", " conn2.connect()Exception= " + e.message)
                }
            }
        }
        Thread(runnable).start()

//        val chatManager: ChatManager = ChatManager.getInstanceFor(conn2)
//        chatManager.addIncomingListener(IncomingChatMessageListener { from, message, chat ->
//            chat.send(message.getBody());
//            Log.e("TAG", "New message from " + from + ": " + message.body)
//        })

        conn2.addAsyncStanzaListener(object : StanzaListener {
            override fun processStanza(packet: Stanza?) {
                //连接成功以后的数据回调
                val headlineMessage = packet as Message
                    Log.e("TAG", "headlineMessage======" + headlineMessage)
               
            }
        }, MESSAGE)


        conn2.addConnectionListener(object : ConnectionListener {
            override fun connected(connection: XMPPConnection?) {
                Log.e("TAG", "connected()=== " + connection.toString())

            }

            override fun connectionClosed() {
                Log.e("TAG", "connectionClosed()=== ")
            }

            override fun connectionClosedOnError(e: Exception?) {
                if (e != null) {
                    Log.e("TAG", "connectionClosedOnError()=== " + e.message)
                }
            }

            override fun authenticated(connection: XMPPConnection?, resumed: Boolean) {
                Log.e("TAG", "authenticated()=== " + resumed)
                Log.e("TAG", " mConnection.isAuthenticated();=======" + conn2.isAuthenticated())
            }

        })

        logins.setOnClickListener {
            var runnable = object : Runnable {
                override fun run() {
                    Log.e("TAG", "连接状态=" + conn2.isConnected)
                    if (!conn2.isConnected) {
                        try {
                            conn2.connect()
                        } catch (e: Exception) {
                            Log.e("TAG", " conn2.connect() Exception= " + e.message)
                        }
                    }
                }
            }
            Thread(runnable).start()
        }

        disLogin.setOnClickListener {
            var runnable = object : Runnable {
                override fun run() {
                    conn2.disconnect()
                }
            }
            Thread(runnable).start()
        }
    }
}

介绍:看文档

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值