Android接環(huán)信仿微信App

國際慣例,先上效果圖

Github代碼地址
環(huán)信SDK開發(fā)文檔
部分代碼

Application中初始化:

        var options = EMOptions()
        // 默認(rèn)添加好友時,是不需要驗證的,改成需要驗證
        options.acceptInvitationAlways = false
        // 是否自動將消息附件上傳到環(huán)信服務(wù)器,默認(rèn)為True是使用環(huán)信服務(wù)器上傳下載,如果設(shè)為 false,需要開發(fā)者自己處理附件消息的上傳和下載
        options.autoTransferMessageAttachments = true
        // 是否自動下載附件類消息的縮略圖等,默認(rèn)為 true 這里和上邊這個參數(shù)相關(guān)聯(lián)
        options.setAutoDownloadThumbnail(true)
        //初始化
        EMClient.getInstance().init(applicationContext, options)
        //在做打包混淆時,關(guān)閉debug模式,避免消耗不必要的資源
        EMClient.getInstance().setDebugMode(true)

鏈接狀態(tài)監(jiān)聽listener :

open class ConnectionListener : EMConnectionListener {

    override fun onConnected() {
        Log.i("minfo", "賬號連接成功")
    }

    override fun onDisconnected(errorCode: Int) {
        when(errorCode) {
            EMError.USER_REMOVED ->
                Log.i("minfo", "用戶已被刪除")
            EMError.USER_LOGIN_ANOTHER_DEVICE ->
                Log.i("minfo", "異地登錄被擠掉")

        }
    }

}

賬號注冊:

        //注意:這里的注冊有個坑,必須要在子線程中才可以,否則會拋出異常
        Thread {
            kotlin.run {
                //注冊賬號,注冊失敗會拋出HyphenateException: Registration failed.
                //比如重復(fù)注冊,比如在子線程中注冊
                try {
                    EMClient.getInstance().createAccount(userId, psd)  //同步方法
                } catch (e: Exception) {
                    Log.i("minfo", "賬號已存在")
                }

                runOnUiThread {
                    //賬號登錄
                    login()
                }
            }
        }.start()

登錄:

        EMClient.getInstance().login(userId, userPsd, object: EMCallBack {
            override fun onSuccess() {
                Log.i("minfo", "登錄聊天服務(wù)器成功")
                startActivity(Intent(this@LoginActivity, MainActivity::class.java))
            }

            override fun onProgress(progress: Int, status: String?) {

            }

            override fun onError(code: Int, error: String?) {
                Log.i("minfo", "登錄聊天服務(wù)器失敗")
            }

        })

退出登錄:

        EMClient.getInstance().logout(true, object: EMCallBack {
            override fun onSuccess() {
                Log.i("minfo", "退出登錄成功")
            }

            override fun onProgress(progress: Int, status: String?) {

            }

            override fun onError(code: Int, error: String?) {
                Log.i("minfo", "退出登錄失敗")
            }

        })

EaseUI 使用指南

EaseUI 是一個 UI 庫,封裝了 IM 功能常用的控件、fragment 等等,旨在幫助開發(fā)者快速集成環(huán)信 SDK。

- 會話列表頁面:EaseConversationListFragment
conversationListFragment = new EaseConversationListFragment();
conversationListFragment.setConversationListItemClickListener(new EaseConversationListItemClickListener() {
            
    @Override
    public void onListItemClicked(EMConversation conversation) {
        startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.getUserName()));
    }
});
- 聯(lián)系人列表EaseContactListFragment
contactListFragment= new EaseContactListFragment();
//需要設(shè)置聯(lián)系人列表才能啟動fragment
contactListFragment.setContactsMap(getContacts());
//設(shè)置item點擊事件
contactListFragment.setContactListItemClickListener(new EaseContactListItemClickListener() {
            
            @Override
            public void onListItemClicked(EaseUser user) {
                startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, user.getUsername()));
            }
        });
- 聊天頁面:EaseChatFragment
        val chatFragment = EaseChatFragment()
        val args = Bundle()
        args.putInt(EaseConstant.EXTRA_CHAT_TYPE, EaseConstant.CHATTYPE_SINGLE)
        args.putString(EaseConstant.EXTRA_USER_ID, userId)
        chatFragment.arguments = args
        supportFragmentManager.beginTransaction().add(R.id.flChat, chatFragment).commit()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容