最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Easeui 3.0 即時(shí)通訊的問(wèn)題匯總

 更新時(shí)間:2016年09月23日 08:57:28   作者:明天會(huì)更好007  
這篇文章主要介紹了Android Easeui 3.0 即時(shí)通訊的問(wèn)題匯總的相關(guān)資料,需要的朋友可以參考下

 0、關(guān)于注冊(cè)賬號(hào)就不用說(shuō)了。

1、創(chuàng)建應(yīng)用、獲取appkey

0、創(chuàng)建應(yīng)用

創(chuàng)建應(yīng)用

1、填寫(xiě)信息

填寫(xiě)信息

2、獲取appkey

獲取appkey

2、集成

0、首先新建一個(gè)工程

1、這里主要介紹使用easeui來(lái)集成環(huán)信的即時(shí)通訊功能,需要下載sdk

下載android sdk
easeui的位置

2、把easeui當(dāng)做依賴(lài)導(dǎo)入到工程當(dāng)中,然后建立依賴(lài)關(guān)系

建立依賴(lài)關(guān)系

3在導(dǎo)入之后可能會(huì)出現(xiàn)的問(wèn)題:

3.0

<uses-permission android:name="android.permission.ACCESS_MOCK_LACATTON>

這個(gè)權(quán)限報(bào)錯(cuò),在咨詢(xún)官方技術(shù)之后,得到的答復(fù)是,可以去掉該權(quán)限。具體的權(quán)限信息可以參考demo中的權(quán)限。

3.1 因?yàn)閑aseui里邊包含v4包,導(dǎo)致V4包沖突,但是在刪除掉項(xiàng)目的V4包之后,還是報(bào)錯(cuò)。原因是在工程里邊包含v7包,而v7包又包含v4,所以還是會(huì)報(bào)錯(cuò)。

報(bào)錯(cuò)信息如下:

這里寫(xiě)圖片描述

開(kāi)始以為是jdk的原因,但是在查閱資料之后發(fā)現(xiàn)是包沖突的問(wèn)題,解決方案:
解決:把項(xiàng)目中的v7刪掉,然后把easeui里邊的V4刪掉,然后在easeui里邊添加v7包。這樣就不會(huì)報(bào)錯(cuò)了。

4、環(huán)境信息配置:

4.0:在AndroidManifest.xml文件中加入一下權(quán)限:

需要的權(quán)限

4.1:配置環(huán)信key

配置環(huán)信key

4.2初始化:這里寫(xiě)最簡(jiǎn)單的,其他的像好友驗(yàn)證等功能參考demo

這里寫(xiě)圖片描述

4.3 .0在easeui使用中,涉及到百度地圖,在此需要自行到百度地圖官網(wǎng)創(chuàng)建應(yīng)用,申請(qǐng)appkey:
具體配置如下(在此處只需要填寫(xiě)appkey,不需要初始化):

這里寫(xiě)圖片描述

4.3.1:在發(fā)送圖片的時(shí)候可能會(huì)有看大圖、查看地圖的功能,在easeui中提提供了這些activity,我們只需要在自己的清單文件中注冊(cè)一下。具體代碼如下:

這里寫(xiě)圖片描述

3、使用

在此處略過(guò)文檔上有的登錄注冊(cè)功能。在此介紹部分可能會(huì)有坑的地方。

注意:0、注冊(cè)功能一般需要服務(wù)器來(lái)實(shí)現(xiàn);1、在使用初始化的時(shí)候,easeui默認(rèn)有自動(dòng)登錄功能,使用時(shí)需要注意,如果需要關(guān)閉此功能,在初始化部分添加如下代碼:

//去取消自動(dòng)登錄 
options.setAutoLogin(false);

0、easeui 適配android6.0:

在下載好的demo中,找到runtimepermissions文件夾,(具體路徑看圖),然后在MainActivity中加入一下代碼(看圖)

這里寫(xiě)圖片描述

在MainActivity中添加如下代碼

1、在消息監(jiān)聽(tīng)中如需需要查看有沒(méi)有走到這里,不要使用Toast來(lái)驗(yàn)證,因?yàn)樵诒O(jiān)聽(tīng)中屬于子線程。

2、使用到的頭像、用戶(hù)名這些信息。建議把頭像的url和用戶(hù)昵稱(chēng)存在本地?cái)?shù)據(jù)庫(kù),這樣不用每次都去后臺(tái)?。ㄈ『笈_(tái)取的話,可能會(huì)出現(xiàn)一閃一閃的情況),如果用戶(hù)信息發(fā)生變化了,可以讓后臺(tái)給發(fā)一個(gè)透?jìng)飨?,然后去更新?shù)據(jù)庫(kù)里邊的數(shù)據(jù)。

3、關(guān)于消息的置頂和取消置頂,可以通過(guò)擴(kuò)展消息來(lái)實(shí)現(xiàn),在環(huán)信里邊,每個(gè)消息可以附加擴(kuò)展消息,我們可以在擴(kuò)展消息里邊加一個(gè)屬性,然后在設(shè)置適配器的時(shí)候根據(jù)這個(gè)屬性去實(shí)現(xiàn)置頂,在發(fā)送消息的時(shí)候要給每一個(gè)置頂?shù)臅?huì)話中的消息,都附加上該擴(kuò)展屬性。

4、關(guān)于群聊天的禁言,可以在進(jìn)入去聊天的時(shí)候先判斷自己的禁言狀態(tài),然后當(dāng)被禁言和被取消禁言的時(shí)候,讓后臺(tái)給發(fā)一個(gè)透?jìng)飨?,?lái)解決這個(gè)問(wèn)題。

5、關(guān)于設(shè)置圓形頭像,需要在布局文件中使用自定義view去替換easeui中的ImageView;

6、自定義消息列表,最后一條消息如果是表情,就加上這一句,就可以把最后表情表現(xiàn)出來(lái)了。

holder.messages_text.setText( EaseSmileUtils.getSmiledText(context, EaseCommonUtils
.getMessageDigest(listEMConversation.get(position).getLastMessage(), context)),BufferType.SPANNA
BLE);

位置:

if (listEMConversation.get(position).getLastMessage().getType() == EMMessage.Type.LOCATION) {
holder.messages_text.setText("[位置]");
}

7、自己給自己發(fā)一條消息

// 刪除和某個(gè)user會(huì)話,如果需要保留聊天記錄,傳false\
EMClient.getInstance().chatManager()
.deleteConversation(username, true);\
// 接收到好友請(qǐng)求 然后創(chuàng)建一個(gè)會(huì)話 添加一個(gè)擴(kuò)展消息
EMMessage emMessage = EMMessage
.createReceiveMessage(EMMessage.Type.CMD);
emMessage.setFrom(username);//發(fā)送人
emMessage.addBody(new EMTextMessageBody("我請(qǐng)求添加您為好友"));//創(chuàng)建消息
emMessage.setUnread(true);//是否已讀
emMessage.setChatType(EMMessage.ChatType.Chat);//聊天類(lèi)型
emMessage.setMsgTime(System.currentTimeMillis());//消息時(shí)間
emMessage.setAttribute("messagetype", "FriendInvitation");//擴(kuò)展消息
emMessage.setTo(PublicStaticData.prefreences.getString("ueserid", ""));//發(fā)送給
EMClient.getInstance().chatManager().saveMessage(emMessage);自己給自己發(fā)一條消息

8、自定義消息條目,如果需要實(shí)現(xiàn)像QQ聊天頁(yè)面的分享,就需要自己去定義一個(gè)這樣的條目的布局,額,不對(duì),因該是兩個(gè)。一個(gè)接收的一個(gè)發(fā)送的。

然后easeui給提供了一個(gè)接口(EaseCustomChatRowProvider),咱們?nèi)?shí)現(xiàn)這個(gè)接口接可以了。
關(guān)鍵代碼如下:

8.0首先去寫(xiě)自定義的條目數(shù)量(在需要的數(shù)量上*2,一個(gè)接收的,一個(gè)發(fā)送的)

定義接收和發(fā)送的消息類(lèi)型

8.1去實(shí)現(xiàn)三個(gè)方法:

getCustomChatRowTypeCount()
getCustomChatRowType(EMMessage message)
getCustomChatRow(EMMessage message, intposition,BaseAdapter adapter)

getCustomChatRowType

在此方法中可以利用消息的擴(kuò)展消息來(lái)實(shí)現(xiàn),我們先判斷擴(kuò)展消息的內(nèi)容,然后去分別加載不同的布局。

getCustomChatRow

去創(chuàng)建不同的條目

自定義條目代碼如下(大家可以參照easeui自帶的條目樣式去實(shí)現(xiàn),此處提供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);
}
@Override
protected voidonInflatView() {
inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE?
R.layout.myease_row_received_picture2: R.layout.myease_row_sent_picture2, this);
}
@Override
protected 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);
}
@Override
public voidonSetUpView() {
// 設(shè)置內(nèi)容
String titleString ="";
String contentString ="";
String picurlString ="";
//設(shè)置標(biāo)題
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);
//設(shè)置內(nèi)容
span = EaseSmileUtils.getSmiledText(context,contentString);
content.setText(span,BufferType.SPANNABLE);
if(!picurlString.equals("")) {
//設(shè)置圖片
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);
// 發(fā)送消息
break;
caseSUCCESS:// 發(fā)送成功
progressBar.setVisibility(View.GONE);
statusView.setVisibility(View.GONE);
break;
caseFAIL:// 發(fā)送失敗
progressBar.setVisibility(View.GONE);
statusView.setVisibility(View.VISIBLE);
break;
caseINPROGRESS:// 發(fā)送中
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();
}
}
}
}
@Override
protected voidonUpdateView() {
adapter.notifyDataSetChanged();
}
@Override
protected voidonBubbleClick() {}
}

使用:在fragment所在的activity中,設(shè)置聊天頁(yè)面的屬性,代碼如下:

這里寫(xiě)圖片描述

使用自定義的條目

9、聊天界面的啟動(dòng)模式 使用singleTask 如果有界面重復(fù)跳轉(zhuǎn),就會(huì)出現(xiàn)頁(yè)面跳轉(zhuǎn)。

10、在集成easeui之后,發(fā)現(xiàn)一個(gè)問(wèn)題??赡軙?huì)出現(xiàn)在有些版本的手機(jī)上一點(diǎn)桌面的圖標(biāo),程序崩潰的情況,解決方案如下:

在libs下創(chuàng)建一個(gè)armeabi-v7a,將armeabi中的so在v7a復(fù)制一份,兼容更多版本的手機(jī)。

解決點(diǎn)擊圖標(biāo)崩潰問(wèn)題

11、 發(fā)現(xiàn)在聊天頁(yè)面的語(yǔ)音播放功能不能使用,沒(méi)有點(diǎn)擊播放的效果,找了好久的原因。發(fā)現(xiàn)在進(jìn)入聊天的fragment之前設(shè)置了點(diǎn)擊頭像的屬性。。。真是個(gè)坑,花了半天時(shí)間。。

messageList.setItemClickListener(new EaseChatMessageList.MessageListItemClickListener() {
@Override
public void onUserAvatarClick(String username) {
System.err.println("點(diǎn)擊頭像");
// 頭像點(diǎn)擊事件
PublicStaticData.thisFriendsId = Long
.parseLong(username);
System.err.println("username:"+Long.parseLong(username));
Intent intent = new Intent(XingActivity_01.this,
ShejiaoFriendDetailsActivity.class);
startActivity(intent);
}
@Override
public void onResendClick(final EMMessage message) {
// 重發(fā)消息按鈕點(diǎn)擊事件
}
@Override
public void onBubbleLongClick(EMMessage message) {
// 氣泡框長(zhǎng)按事件
}
@Override
public boolean onBubbleClick(EMMessage message) {
// 氣泡框點(diǎn)擊事件,EaseUI有默認(rèn)實(shí)現(xiàn)這個(gè)事件,如果需要覆蓋,return值要返回true
//注意這里,一定要返回false,否則點(diǎn)擊事件就會(huì)覆蓋了
return false;
}
@Override
public void onUserAvatarLongClick(String username) {
// TODO Auto-generated method stub
}
});

消息的點(diǎn)擊事件

消息的點(diǎn)擊事件

好了,easeui部分就分享到這里。如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android ViewPager實(shí)現(xiàn)選項(xiàng)卡切換

    Android ViewPager實(shí)現(xiàn)選項(xiàng)卡切換

    這篇文章主要介紹了Android ViewPager實(shí)現(xiàn)選項(xiàng)卡切換,詳細(xì)分析了ViewPager實(shí)現(xiàn)選項(xiàng)卡切換功能,感興趣的小伙伴們可以參考一下
    2016-02-02
  • android 二次打包完成apk多渠道打包的方法

    android 二次打包完成apk多渠道打包的方法

    本篇文章主要介紹了android 二次打包完成apk多渠道打包的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Android編程動(dòng)態(tài)按鈕實(shí)現(xiàn)方法

    Android編程動(dòng)態(tài)按鈕實(shí)現(xiàn)方法

    這篇文章主要介紹了Android編程動(dòng)態(tài)按鈕實(shí)現(xiàn)方法,分享了onTouch方法及xml調(diào)用兩種實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)

    Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)

    本文主要介紹了Android 給應(yīng)用程序的icon添加未讀消息個(gè)數(shù)提示(紅圈內(nèi)數(shù)字)的方法。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Android自定義控件RatingBar調(diào)整字體大小

    Android自定義控件RatingBar調(diào)整字體大小

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件RatingBar調(diào)整字體大小的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 簡(jiǎn)單談?wù)刟ndroid studio 的單元測(cè)試

    簡(jiǎn)單談?wù)刟ndroid studio 的單元測(cè)試

    昨天在完善項(xiàng)目的時(shí)候,需要進(jìn)行單元測(cè)試,在Eclipse環(huán)境中進(jìn)行是很簡(jiǎn)單的,但是在Android Studio環(huán)境中進(jìn)行單元測(cè)試,在國(guó)內(nèi)找了很多資料,大都是人云亦云,本文發(fā)布出來(lái)供大家學(xué)習(xí)參考。
    2016-08-08
  • Android自定義圓形倒計(jì)時(shí)進(jìn)度條

    Android自定義圓形倒計(jì)時(shí)進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義圓形倒計(jì)時(shí)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 最新評(píng)論

    盖州市| 黑龙江省| 北流市| 沾益县| 武乡县| 阿克苏市| 麟游县| 从江县| 固安县| 杭州市| 老河口市| 黔南| 西畴县| 曲阳县| 静安区| 尤溪县| 丹寨县| 宜丰县| 光泽县| 图们市| 镇巴县| 梁平县| 杨浦区| 皋兰县| 年辖:市辖区| SHOW| 云和县| 开化县| 大姚县| 拜泉县| 苍山县| 华容县| 孝义市| 雷州市| 乌什县| 柳林县| 无锡市| 南安市| 辽宁省| 滦平县| 柳林县|