0、關於註冊帳號就不用說了。
1、建立應用、擷取appkey
0、建立應用
1、填寫資訊
2、擷取appkey
2、整合
0、首先建立一個工程
1、這裡主要介紹使用easeui來整合環信的即時通訊功能,需要下載sdk
2、把easeui當做依賴匯入到工程當中,然後建立依賴關係
3在匯入之後可能會出現的問題:
3.0
<uses-permission android:name="android.permission.ACCESS_MOCK_LACATTON>
這個許可權報錯,在諮詢官方技術之後,得到的回覆是,可以去掉該許可權。具體的許可權資訊可以參考demo中的許可權。
3.1 因為easeui裡邊包含v4包,導致V4包衝突,但是在刪除掉項目的V4包之後,還是報錯。原因是在工程裡邊包含v7包,而v7包又包含v4,所以還是會報錯。
報錯資訊如下:
開始以為是jdk的原因,但是在查閱資料之後發現是包衝突的問題,解決方案:
解決:把項目中的v7刪掉,然後把easeui裡邊的V4刪掉,然後在easeui裡邊添加v7包。這樣就不會報錯了。
4、環境資訊配置:
4.0:在AndroidManifest.xml檔案中加入一下許可權:
4.1:配置環信key
4.2初始化:這裡寫最簡單的,其他的像好友驗證等功能參考demo
4.3 .0在easeui使用中,涉及到百度地圖,在此需要自行到百度地圖官網建立應用,申請appkey:
具體配置如下(在此處只需要填寫appkey,不需要初始化):
4.3.1:在發送圖片的時候可能會有看大圖、查看地圖的功能,在easeui中提提供了這些activity,我們只需要在自己的資訊清單檔中註冊一下。具體代碼如下:
3、使用
在此處略過文檔上有的登入註冊功能。在此介紹部分可能會有坑的地方。
注意:0、註冊功能一般需要伺服器來實現;1、在使用初始化的時候,easeui預設有自動登入功能,使用時需要注意,如果需要關閉此功能,在初始化部分添加如下代碼:
//去取消自動登入 options.setAutoLogin(false);
0、easeui 適配android6.0:
在下載好的demo中,找到runtimepermissions檔案夾,(具體路徑看圖),然後在MainActivity中加入一下代碼(看圖)
在MainActivity中添加如下代碼
1、在訊息監聽中如需需要查看有沒有走到這裡,不要使用Toast來驗證,因為在監聽中屬於子線程。
2、使用到的頭像、使用者名稱這些資訊。建議把頭像的url和使用者暱稱存在本機資料庫,這樣不用每次都去後台取(取後台取的話,可能會出現一閃一閃的情況),如果使用者資訊發生變化了,可以讓後台給發一個透傳訊息,然後去更新資料庫裡邊的資料。
3、關於訊息的置頂和取消置頂,可以通過擴充訊息來實現,在環信裡邊,每個訊息可以附加擴充訊息,我們可以在擴充訊息裡邊加一個屬性,然後在設定適配器的時候根據這個屬性去實現置頂,在發送訊息的時候要給每一個置頂的會話中的訊息,都附加上該擴充屬性。
4、關於群聊天的禁言,可以在進入去聊天的時候先判斷自己的禁言狀態,然後當被禁言和被取消禁言的時候,讓後台給發一個透傳訊息,來解決這個問題。
5、關於設定圓形頭像,需要在布局檔案中使用自訂view去替換easeui中的ImageView;
6、自訂訊息列表,最後一條訊息如果是表情,就加上這一句,就可以把最後表情表現出來了。
holder.messages_text.setText( EaseSmileUtils.getSmiledText(context, EaseCommonUtils.getMessageDigest(listEMConversation.get(position).getLastMessage(), context)),BufferType.SPANNABLE);
位置:
if (listEMConversation.get(position).getLastMessage().getType() == EMMessage.Type.LOCATION) {holder.messages_text.setText("[位置]");}
7、自己給自己發一條訊息
// 刪除和某個user會話,如果需要保留聊天記錄,傳false\EMClient.getInstance().chatManager().deleteConversation(username, true);\// 接收到好友請求 然後建立一個會話 添加一個擴充訊息EMMessage emMessage = EMMessage.createReceiveMessage(EMMessage.Type.CMD);emMessage.setFrom(username);//發送人emMessage.addBody(new EMTextMessageBody("我請求添加您為好友"));//建立訊息emMessage.setUnread(true);//是否已讀emMessage.setChatType(EMMessage.ChatType.Chat);//聊天類型emMessage.setMsgTime(System.currentTimeMillis());//訊息時間emMessage.setAttribute("messagetype", "FriendInvitation");//擴充訊息emMessage.setTo(PublicStaticData.prefreences.getString("ueserid", ""));//發送給EMClient.getInstance().chatManager().saveMessage(emMessage);自己給自己發一條訊息
8、自訂訊息條目,如果需要實現像QQ聊天頁面的分享,就需要自己去定義一個這樣的條目的布局,額,不對,因該是兩個。一個接收的一個發送的。
然後easeui給提供了一個介面(EaseCustomChatRowProvider),咱們去實現這個介面接可以了。
關鍵代碼如下:
8.0首先去寫自訂的條目數量(在需要的數量上*2,一個接收的,一個發送的)
定義接收和發送的訊息類型
8.1去實現三個方法:
getCustomChatRowTypeCount()getCustomChatRowType(EMMessage message)getCustomChatRow(EMMessage message, intposition,BaseAdapter adapter)
getCustomChatRowType
在此方法中可以利用訊息的擴充訊息來實現,我們先判斷擴充訊息的內容,然後去分別載入不同的布局。
去建立不同的條目
自訂條目代碼如下(大家可以參照easeui內建的條目樣式去實現,此處提供EaseChatRowPic.java代碼)
importandroid.content.Context;importandroid.text.Spannable;importandroid.view.View;importandroid.widget.BaseAdapter;importandroid.widget.ImageView;importandroid.widget.TextView;importandroid.widget.TextView.BufferType;importcom.hyphenate.chat.EMClient;importcom.hyphenate.chat.EMMessage;importcom.hyphenate.chat.EMMessage.ChatType;importcom.hyphenate.easeui.R;importcom.hyphenate.easeui.publicData.StaticData;importcom.hyphenate.easeui.utils.EaseSmileUtils;importcom.hyphenate.exceptions.HyphenateException;importcom.lidroid.xutils.BitmapUtils;public classEaseChatRowOnePicextendsEaseChatRow {privateTextViewtitle;privateImageViewimg1;privateTextViewcontent;publicEaseChatRowOnePic(Contextcontext,EMMessage message, intposition,BaseAdapter adapter) {super(context,message,position,adapter);}@Overrideprotected voidonInflatView() {inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE?R.layout.myease_row_received_picture2: R.layout.myease_row_sent_picture2, this);}@Overrideprotected voidonFindViewById() {title= (TextView) findViewById(R.id.myease2_received_title);content= (TextView) findViewById(R.id.myease2_received_content);img1= (ImageView) findViewById(R.id.myease2_received_image132);}@Overridepublic voidonSetUpView() {// 設定內容String titleString ="";String contentString ="";String picurlString ="";//設定標題try{titleString =message.getStringAttribute("EXT_TITLE");contentString =message.getStringAttribute("EXT_DETAIL");picurlString =message.getStringAttribute("EXT_IMG1");}catch(HyphenateException e) {e.printStackTrace();}Spannable span;span = EaseSmileUtils.getSmiledText(context,titleString);title.setText(span,BufferType.SPANNABLE);//設定內容span = EaseSmileUtils.getSmiledText(context,contentString);content.setText(span,BufferType.SPANNABLE);if(!picurlString.equals("")) {//設定圖片BitmapUtils bitmapUtils =newBitmapUtils(getContext(),StaticData.picpath);bitmapUtils.display(img1,picurlString);}handleTextMessage();}protected voidhandleTextMessage() {if(message.direct() == EMMessage.Direct.SEND) {setMessageSendCallback();switch(message.status()) {caseCREATE:progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);// 發送訊息break;caseSUCCESS:// 發送成功progressBar.setVisibility(View.GONE);statusView.setVisibility(View.GONE);break;caseFAIL:// 發送失敗progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);break;caseINPROGRESS:// 發送中progressBar.setVisibility(View.VISIBLE);statusView.setVisibility(View.GONE);break;default:break;}}else{if(!message.isAcked() &&message.getChatType() == ChatType.Chat) {try{EMClient.getInstance().chatManager().ackMessageRead(message.getFrom(),message.getMsgId());}catch(HyphenateException e) {e.printStackTrace();}}}}@Overrideprotected voidonUpdateView() {adapter.notifyDataSetChanged();}@Overrideprotected voidonBubbleClick() {}}
使用:在fragment所在的activity中,設定聊天頁面的屬性,代碼如下:
使用自訂的條目
9、聊天介面的啟動模式 使用singleTask 如果有介面重複跳轉,就會出現頁面跳轉。
10、在整合easeui之後,發現一個問題。可能會出現在有些版本的手機上一點案頭的表徵圖,程式崩潰的情況,解決方案如下:
在libs下建立一個armeabi-v7a,將armeabi中的so在v7a複製一份,相容更多版本的手機。
11、 發現在聊天頁面的語音播放功能不能使用,沒有點擊播放的效果,找了好久的原因。發現在進入聊天的fragment之前設定了點擊頭像的屬性。。。真是個坑,花了半天時間。。
messageList.setItemClickListener(new EaseChatMessageList.MessageListItemClickListener() {@Overridepublic void onUserAvatarClick(String username) {System.err.println("點擊頭像");// 頭像點擊事件PublicStaticData.thisFriendsId = Long.parseLong(username);System.err.println("username:"+Long.parseLong(username));Intent intent = new Intent(XingActivity_01.this,ShejiaoFriendDetailsActivity.class);startActivity(intent);}@Overridepublic void onResendClick(final EMMessage message) {// 重發訊息按鈕點擊事件}@Overridepublic void onBubbleLongClick(EMMessage message) {// 氣泡框長按事件}@Overridepublic boolean onBubbleClick(EMMessage message) {// 氣泡框點擊事件,EaseUI有預設實現這個事件,如果需要覆蓋,return值要返回true//注意這裡,一定要返回false,否則點擊事件就會覆蓋了return false;}@Overridepublic void onUserAvatarLongClick(String username) {// TODO Auto-generated method stub}});
訊息的點擊事件
好了,easeui部分就分享到這裡。如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!