av一区二区三区在线观看_久久久久国产一区二区三区_伊人春色在线播放_欧美亚洲国产一区_九九热在线免费视频_久久视频国产

1、單聊

? 發(fā)送文本\圖片\附件—我們假設(shè)Tony給John發(fā)送文本消息,則代碼如下:(參考Demo中IMChattingHelper類和ChattingFragment類)

try {
    // 組建一個(gè)待發(fā)送的ECMessage
    ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT);
   //如果需要跨應(yīng)用發(fā)送消息,需通過appkey+英文井號+用戶帳號的方式拼接,發(fā)送錄音、發(fā)送群組消息等與此方式一致。
   //例如:appkey=20150314000000110000000000000010 
              帳號ID=john  
              傳入帳號=20150314000000110000000000000010#john              
   //msg.setTo(""appkey#John的賬號");
    // 設(shè)置消息接收者
    msg.setTo("John的賬號");

    // 創(chuàng)建一個(gè)文本消息體,并添加到消息對象中
    ECTextMessageBody msgBody = new ECTextMessageBody(text.toString());

    // 或者創(chuàng)建一個(gè)圖片消息體 并且設(shè)置附件包體(其實(shí)圖片也是相當(dāng)于附件)
    // 比如我們發(fā)送SD卡里面的一張Tony_2015.jpg圖片
    ECImageMessageBody msgBody  = new ECImageMessageBody();
    // 設(shè)置附件名
    msgBody.setFileName("Tony_2015.jpg");
    // 設(shè)置附件擴(kuò)展名
    msgBody.setFileExt("jpg");
    // 設(shè)置附件本地路徑
    msgBody.setLocalUrl("../Tony_2015.jpg");

    // 或者創(chuàng)建一個(gè)創(chuàng)建附件消息體
    // 比如我們發(fā)送SD卡里面的一個(gè)Tony_2015.zip文件
    ECFileMessageBody msgBody  = new ECFileMessageBody();
    // 設(shè)置附件名
    msgBody.setFileName("Tony_2015.zip");
    // 設(shè)置附件擴(kuò)展名
    msgBody.setFileExt(zip);
    // 設(shè)置附件本地路徑
    msgBody.setLocalUrl("../Tony_2015.zip");
    // 設(shè)置附件長度
    msgBody.setLength("Tony_2015.zip文件大小");

    // 將消息體存放到ECMessage中
    msg.setBody(msgBody);
    // 調(diào)用SDK發(fā)送接口發(fā)送消息到服務(wù)器
    ECChatManager manager = ECDevice.getECChatManager();
    manager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {
        @Override
        public void onSendMessageComplete(ECError error, ECMessage message) {
            // 處理消息發(fā)送結(jié)果
            if(message == null) {
                return ;
            }
            // 將發(fā)送的消息更新到本地?cái)?shù)據(jù)庫并刷新UI
        }

        @Override
        public void onProgress(String msgId, int totalByte, int progressByte) {
            // 處理文件發(fā)送上傳進(jìn)度(盡上傳文件、圖片時(shí)候SDK回調(diào)該方法)
        }
    });
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}

                    

? 發(fā)送語音

1、我們假設(shè)Tony給John發(fā)送一條語音,則代碼如下:(參考Demo中IMChattingHelper類和ChattingFragment類)

try {
    // 組建一個(gè)待發(fā)送的ECMessage
    ECMessage message = ECMessage.createECMessage(ECMessage.Type.VOICE);
    // 設(shè)置消息接收者
    message.setTo("John的賬號");
    // 擴(kuò)張字段,應(yīng)用可以自定義規(guī)則
    message.setUserData("msgExt://amr");
    // 設(shè)置語音包體,語音錄制文件需要保存的目錄
    ECVoiceMessageBody messageBody = new ECVoiceMessageBody(new File("保存路徑"), 0);
    message.setBody(messageBody);
    // 僅錄制語音消息,錄制完成后需要調(diào)用發(fā)送接口發(fā)送消息
    ECChatManager manager = ECDevice.getECChatManager();
    manager.startVoiceRecording(message, 
            new ECChatManager.OnRecordTimeoutListener() {

        @Override
        public void onRecordingTimeOut(long duration) {
            // 如果語音錄制超過最大60s長度,則發(fā)送
            // 同時(shí)SDK停止當(dāng)前語音錄制
        }

        @Override
        public void onRecordingAmplitude(
                double amplitude) {
            // 顯示聲音振幅

        }

    });
    // 調(diào)用SDk接口停止當(dāng)前錄音
    manager.stopVoiceRecording(
            new ECChatManager.OnStopVoiceRecordingListener() {
        @Override
        public void onRecordingComplete() {
            // SDK停止錄音完成,調(diào)用SDK接口發(fā)送語音消息
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}
//將ECMessage對象傳入sendMessage方法進(jìn)行發(fā)送。

                    

2、我們假設(shè)Tony給John發(fā)送錄音變聲消息,則代碼如下:

Parameters parameters =new Parameters();
//輸入與輸出的文件地址
parameters.inFileName="";
parameters.outFileName"";
//例如:demo中如下填寫:
//parameters.inFileName=FileAccessor.getVoicePathName().getAbsolutePath()+"/"+mAmrPathName;
//parameters.outFileName=FileAccessor.getVoicePathName().getAbsolutePath()+"/"+appendName+mAmrPathName; 

//根據(jù)傳入不同的pitch及tempo會(huì)引起不同的變聲效果、以下的是demo中的效果
if("yuansheng".equals(appendName)){

}else if("luoli".equals(appendName)){
   parameters.pitch=12;  //- 12  12 
   parameters.tempo=1;  // -0.05 1
}else if("dashu".equals(appendName)){
   parameters.pitch=2;
   parameters.tempo=1;
}else if("jingsong".equals(appendName)){
   parameters.pitch=1;
   parameters.tempo=-3;
}else if("gaoguai".equals(appendName)){
   parameters.pitch=5;
   parameters.tempo=1;
}else if("kongling".equals(appendName)){
   parameters.pitch=1;
   parameters.tempo=-1;
}
return parameters;

file = new File("保存路徑");
ECChatManager().changeVoice(parameters, new OnChangeVoiceListener() {
@Override
public void onChangeVoice(ECError error, Parameters para) {
 if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
   instance.playVoice(parameters.outFileName, false);
 }else {
   file.delete();
 }
}
});

//將變音文件組成一個(gè)待發(fā)送的ECMessage
ECMessage message = ECMessage.createECMessage(ECMessage.Type.VOICE);
// 設(shè)置接收者、發(fā)送者、會(huì)話ID等信息
message.setForm("Tony的賬號");
message.setMsgTime(System.currentTimeMillis());
// 設(shè)置消息接收者
message.setTo("John的賬號");
message.setSessionId("John的賬號");
// 設(shè)置消息發(fā)送類型(發(fā)送或者接收)
message.setDirection(ECMessage.Direction.SEND);
// 擴(kuò)張字段,應(yīng)用可以自定義規(guī)則
message.setUserData("msgExt://amr");
// 設(shè)置語音包體,語音錄制文件需要保存的目錄
ECVoiceMessageBody messageBody = new ECVoiceMessageBody(file, 0);
message.setBody(messageBody);
//將ECMessage對象傳入sendMessage方法進(jìn)行發(fā)送。

                    

? 地理位置

//經(jīng)緯度
ECMessage msg = ECMessage.createECMessage(ECMessage.Type.LOCATION);
        // 設(shè)置消息接收者
        msg.setTo(mRecipients);
        // 創(chuàng)建一個(gè)消息體,并添加到位置消息對象中
        ECLocationMessageBody msgBody = new ECLocationMessageBody("傳入lat", "傳入lon");
        msgBody.setTitle("位置信息");
        msg.setBody(msgBody);
        
ECChatManager manager = ECDevice.getECChatManager();
    manager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {
        @Override
        public void onSendMessageComplete(ECError error, ECMessage message) {
            // 處理消息發(fā)送結(jié)果
            if(message == null) {
                return ;
            }
            // 將發(fā)送的消息更新到本地?cái)?shù)據(jù)庫并刷新UI
        }

        @Override
        public void onProgress(String msgId, int totalByte, int progressByte) {
        }
    });
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}

//將ECMessage對象傳入sendMessage方法進(jìn)行發(fā)送

                    

? 接收消息—我們假設(shè)John收到Tony發(fā)送過來的消息,則代碼如下:

@Override
//如果是跨應(yīng)用消息,發(fā)送者為appkey+英文井號+用戶帳號。
//例如:  appkey=20150314000000110000000000000010 
             帳號ID=john  
             發(fā)送者=20150314000000110000000000000010#john  
public void OnReceivedMessage(ECMessage msg) {
	if(msg == null) {
		return ;
	}
	// 接收到的IM消息,根據(jù)IM消息類型做不同的處理(IM消息類型:ECMessage.Type)
	ECMessage.Type type = msg.getType();
	if(type == ECMessage.Type.TXT) {
		// 在這里處理文本消息
		ECTextMessageBody textMessageBody = (ECTextMessageBody) msg.getBody();
	} else {

		String thumbnailFileUrl = null;
		String remoteUrl = null;
		if (type == ECMessage.Type.FILE) {
			// 在這里處理附件消息
			ECFileMessageBody fileMsgBody = (ECFileMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = fileMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.IMAGE) {
			// 在這里處理圖片消息
			ECImageMessageBody imageMsgBody = (ECImageMessageBody) msg.getBody();
			// 獲得縮略圖地址
			thumbnailFileUrl = imageMsgBody.getThumbnailFileUrl();
			// 獲得原圖地址
			remoteUrl = imageMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.VOICE) {
			// 在這里處理語音消息
			ECVoiceMessageBody voiceMsgBody = (ECVoiceMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = voiceMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.VIDEO) {
			// 在這里處理視頻消息
			ECVideoMessageBody videoMessageBody = (ECVideoMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = videoMessageBody.getRemoteUrl();
		} else if (type == ECMessage.Type.LOCATION) {
			// 在這里處理地理位置消息
			ECLocationMessageBody locationMessageBody = (ECLocationMessageBody) msg.getBody();
			// 獲得下載地址
			locationMessageBody.getLatitude(); // 緯度信息
			locationMessageBody.getLongitude();// 經(jīng)度信息
		} else {
			Log.e("ECSDK_Demo" , "Can't handle msgType=" + type.name()
					+ " , then ignore.");
			// 后續(xù)還會(huì)支持(自定義等消息類型)
		}

		if(TextUtils.isEmpty(remoteUrl)) {
			return ;
		}
		if(!TextUtils.isEmpty(thumbnailFileUrl)) {
			// 先下載縮略圖
		} else {
			// 下載附件
		}
	}
	// 根據(jù)不同類型處理完消息之后,將消息序列化到本地存儲(chǔ)(sqlite)
	// 通知UI有新消息到達(dá)

}

                    

? 閱后即焚—閱后即焚(暫時(shí)只支持單聊)可以參考demo通過ECMessage中的擴(kuò)展userData字段去實(shí)現(xiàn)、當(dāng)接收方收到發(fā)送方發(fā)送過來的消息、解析userData字段發(fā)現(xiàn)是閱后即焚消息,在查看之后可以調(diào)用刪除閱后即焚消息、通知服務(wù)器刪除消息,同時(shí)發(fā)送方會(huì)收到消息被刪除的通知。 代碼如下:

1、接收方刪除閱后即焚消息
ECDevice.getECChatManager().deleteMessage("閱后即焚的消息的ECMessage對象", new OnDeleteMessageListener() {
  public void onDeleteMessage(ECError paramECError, ECMessage paramECMessage) {
     //處理刪除閱后即焚消息的回調(diào)、獲取刪除消息的結(jié)果響應(yīng)
  }
});

2、發(fā)送方收到接收方刪除閱后即焚消息的通知
(通過實(shí)現(xiàn)OnChatReceiveListener中的 onReceiveMessageNotify方法可以獲取到消息被刪除的通知)
public void onReceiveMessageNotify(ECMessageNotify msg) {
  if(msg.getNotifyType()==NotifyType.DELETE){  //通過if判斷代表當(dāng)前類型是刪除閱后即焚的通知
     ECMessageDeleteNotify deleteMsg=(ECMessageDeleteNotify) msg;
     //處理接收方刪除閱后即焚消息的通知、比如刪除本地圖片等
   }
}

                    

? 發(fā)送富文本消息—代碼如下:

ECMessage msg = ECMessage.createECMessage(ECMessage.Type.RICH_TEXT); //創(chuàng)建1個(gè)富文本消息
 msg.setTo(to); // 設(shè)置消息接收者

	
 // 創(chuàng)建一個(gè)富文本消息體 
 ECPreviewMessageBody msgBody = new ECPreviewMessageBody(); //富文本消息body
 //title標(biāo)題、設(shè)置富文本消息的標(biāo)題
 msgBody.setTitle(title); 
 //desc設(shè)置大概的描述信息 
 msgBody.setDescContent(desc);
 //設(shè)置解析網(wǎng)頁獲取的圖片的本地地址(apps需要將獲取的圖片保存到手機(jī)上)、sdk需要將圖片進(jìn)行上傳。
 msgBody.setLocalUrl(xxx.jpg);
 //url設(shè)置富文本消息對應(yīng)的網(wǎng)頁的url、當(dāng)對方點(diǎn)擊時(shí)打開的網(wǎng)頁網(wǎng)址
 msgBody.setUrl(url); 
 //解析網(wǎng)頁圖片的url地址、設(shè)置當(dāng)前富文本消息的一張圖片、解析網(wǎng)頁獲取該圖片的過程由開發(fā)者實(shí)現(xiàn)、
 //也可以參考demo使用jsoup或其他實(shí)現(xiàn)。
 msgBody.setRemoteUrl(imgUrl); 
 //將msgBody設(shè)置給該富文本消息
 msg.setBody(msgBody); 
 //獲取消息發(fā)送者管理
ECChatManager manager = ECDevice.getECChatManager();
//發(fā)送富文本消息
 manager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {
        @Override
        public void onSendMessageComplete(ECError error, ECMessage message) {
            // 處理消息發(fā)送結(jié)果
            if(message == null) {
                return ;
            }
            // 將發(fā)送的消息更新到本地?cái)?shù)據(jù)庫并刷新UI
        }

        @Override
        public void onProgress(String msgId, int totalByte, int progressByte) {
            // 處理文件發(fā)送上傳進(jìn)度
        }
    });
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}

                    

? 發(fā)送狀態(tài)消息—代碼如下:

        // 組建一個(gè)待發(fā)送的ECMessage
        ECMessage msg = ECMessage.createECMessage(ECMessage.Type.STATE);
        
        msg.setTo(mRecipients); // 設(shè)置消息接收者
        // 創(chuàng)建一個(gè)狀態(tài)消息體,并添加到消息對象中
        ECUserStateMessageBody msgBody = new ECUserStateMessageBody(state);//state當(dāng)前聊天過程中的輸入狀態(tài)
        msg.setBody(msgBody);
	ECChatManager ecChatManager = ECDevice.getECChatManager(); //獲取發(fā)送消息管理者
	if(ecChatManager==null){
			return;
	}
	ecChatManager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {//發(fā)送狀態(tài)消息
			@Override
			public void onSendMessageComplete(ECError error, ECMessage message) {

			}

			@Override
			public void onProgress(String msgId, int totalByte, int progressByte) {

			}
	});

                    

? 撤回消息(僅支持發(fā)送成功后、在2分鐘之內(nèi)進(jìn)行撤回處理)—代碼如下:

ECChatManager manager = ECDevice.getECChatManager();//獲取消息發(fā)送者管理
 chatManager.revokeMessage(message, new ECChatManager.OnRevokeMessageListener() {
		@Override
		public void onRevokeMessage(ECError error, ECMessage message) {
			if(error.errorCode ==SdkErrorCode.REQUEST_SUCCESS){
									
				Log.d(“撤回成功");
									
			}else {
				Log.d(“撤回失敗");
			}
		}
	});
	
                    

? 把消息置為已讀—代碼如下:

ECChatManager ecChatManager = ECDevice.getECChatManager(); //獲取發(fā)送消息管理者
if(ecChatManager==null){
		return;
}
chatManager.readMessage(message, new ECChatManager.OnReadMessageListener() { 
        @Override 
    public void  onReadMessageResult(ECError error, ECMessage message) { 

    if(error.errorCode== SdkErrorCode.REQUEST_SUCCESS){ 

            Log.d(“置為已讀成功"); 
			} 
		 } 
		}
);

                    

? 設(shè)置會(huì)話置頂—代碼如下:

ECChatManager chatManager = SDKCoreHelper.getECChatManager();
        if(chatManager ==null){
            return null;
        }
        chatManager.setSessionToTop(sessionId, isTop, new ECChatManager.OnSetContactToTopListener() {
            @Override
            public void onSetContactResult(ECError error, String contact) {

                if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
                    
                    Log.d(TAG,"設(shè)置成功");
            }else {
                    Log.d(TAG,"設(shè)置失敗");
            }
            }
        });
        
                    

? 獲取置頂會(huì)話列表—代碼如下:

ECChatManager chatManager =ECDevice.getECChatManager();
		if(chatManager ==null){
			return;
		}
		chatManager.getSessionsOfTop(new ECChatManager.OnGetSessionsOfTopListener() {
			@Override
			public void onGetSessionsOfTopResult(ECError error, String[] sessionsArr) {
				if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
					Log.d(TAG,”獲取成功");
				}else{
					Log.d(TAG,”獲取失敗");
				}
			}
		});
		
                    

? 取消發(fā)送消息(僅支持voiceBody、videoBody、fileBody、imageBody、preViewBody消息body、取消的回調(diào)結(jié)果在onSendMessageComplete回調(diào)中返回171259錯(cuò)誤碼)—代碼如下:

ECChatManager chatManager =ECDevice.getECChatManager();
if(chatManager ==null){
	return;
}
chatManager.cancelSendMessage(message);

                    

2、群聊

? 發(fā)送文本\語音\圖片\附件—我們假設(shè)Tony給群組名為"出彩中國人"的群組發(fā)送消息,群聊與點(diǎn)對點(diǎn)唯一的區(qū)別在于
群聊的接收者賬號為群組ID,則代碼如下:(參考Demo中IMChattingHelper類和ChattingFragment類)

try {
    // 組建一個(gè)待發(fā)送的ECMessage
    ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT);
    //設(shè)置消息的屬性:發(fā)出者,接受者,發(fā)送時(shí)間等
    msg.setForm("Tony的賬號");
    msg.setMsgTime(System.currentTimeMillis());
    // 設(shè)置消息接收者
    msg.setTo("出彩的中國人群組ID");
    msg.setSessionId("出彩的中國人群組ID ");
    // 設(shè)置消息發(fā)送類型(發(fā)送或者接收)
    msg.setDirection(ECMessage.Direction.SEND);
    // 創(chuàng)建一個(gè)文本消息體,并添加到消息對象中
    ECTextMessageBody msgBody = new ECTextMessageBody("來自Tony的消息");
    msg.setBody(msgBody);

// 圖片、文件、語音可以參考點(diǎn)對點(diǎn)消息體創(chuàng)建
    // 調(diào)用SDK發(fā)送接口發(fā)送消息到服務(wù)器
    ECChatManager manager = ECDevice.getECChatManager();
    manager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {
        @Override
        public void onSendMessageComplete(ECError error, ECMessage message) {
            // 處理消息發(fā)送結(jié)果
            if(message == null) {
                return ;
            }
            // 將發(fā)送的消息更新到本地?cái)?shù)據(jù)庫并刷新UI
        }

        @Override
        public void onProgress(String msgId, int totalByte, int progressByte) {
            // 處理文件發(fā)送上傳進(jìn)度(盡上傳文件、圖片時(shí)候SDK回調(diào)該方法)
        }

        @Override
        public void onComplete(ECError error) {
            // 忽略
        }
    });
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}


                    

? 發(fā)送變聲消息 — 我們假設(shè)Tony給群組名為"出彩中國人"的群組發(fā)送錄音變聲消息,則代碼如下:

Parameters parameters =new Parameters();
//輸入與輸出的文件地址
parameters.inFileName="";
parameters.outFileName"";
//例如:demo中如下填寫:
//parameters.inFileName=FileAccessor.getVoicePathName().getAbsolutePath()+"/"+mAmrPathName;
//parameters.outFileName=FileAccessor.getVoicePathName().getAbsolutePath()+"/"+appendName+mAmrPathName; 

//根據(jù)傳入不同的pitch及tempo會(huì)引起不同的變聲效果、以下的是demo中的效果
if("yuansheng".equals(appendName)){

}else if("luoli".equals(appendName)){
   parameters.pitch=12;  //- 12  12 
   parameters.tempo=1;  // -0.05 1
}else if("dashu".equals(appendName)){
   parameters.pitch=2;
   parameters.tempo=1;
}else if("jingsong".equals(appendName)){
   parameters.pitch=1;
   parameters.tempo=-3;
}else if("gaoguai".equals(appendName)){
   parameters.pitch=5;
   parameters.tempo=1;
}else if("kongling".equals(appendName)){
   parameters.pitch=1;
   parameters.tempo=-1;
}
return parameters;

file = new File("保存路徑");
ECChatManager().changeVoice(parameters, new OnChangeVoiceListener() {
@Override
public void onChangeVoice(ECError error, Parameters para) {
 if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
   instance.playVoice(parameters.outFileName, false);
 }else {
   file.delete();
 }
}
});

//將變音文件組成一個(gè)待發(fā)送的ECMessage
ECMessage message = ECMessage.createECMessage(ECMessage.Type.VOICE);
// 設(shè)置接收者、發(fā)送者、會(huì)話ID等信息
message.setForm("Tony的賬號");
message.setMsgTime(System.currentTimeMillis());
// 設(shè)置消息接收者
msg.setTo("出彩的中國人群組ID");
msg.setSessionId("出彩的中國人群組ID ");
// 設(shè)置消息發(fā)送類型(發(fā)送或者接收)
message.setDirection(ECMessage.Direction.SEND);
// 擴(kuò)張字段,應(yīng)用可以自定義規(guī)則
message.setUserData("msgExt://amr");
// 設(shè)置語音包體,語音錄制文件需要保存的目錄
ECVoiceMessageBody messageBody = new ECVoiceMessageBody(file, 0);
message.setBody(messageBody);
//將ECMessage對象傳入sendMessage方法進(jìn)行發(fā)送。

                    

? 地理位置

說明:關(guān)于發(fā)送地理位置,該功能需要用戶自己在客戶端通過發(fā)送消息的接口實(shí)現(xiàn),SDK中沒有封裝具體的發(fā)送位置接口(android、ios均需用戶自己在客戶端實(shí)現(xiàn))。

ECMessage msg = ECMessage.createECMessage(ECMessage.Type.LOCATION);
        // 設(shè)置消息接收者
        msg.setTo(mRecipients);
        // 創(chuàng)建一個(gè)消息體,并添加到位置消息對象中
        ECLocationMessageBody msgBody = new ECLocationMessageBody("傳入lat", "傳入lon");
        msgBody.setTitle("位置信息");
        msg.setBody(msgBody);
        
ECChatManager manager = ECDevice.getECChatManager();
    manager.sendMessage(msg, new ECChatManager.OnSendMessageListener() {
        @Override
        public void onSendMessageComplete(ECError error, ECMessage message) {
            // 處理消息發(fā)送結(jié)果
            if(message == null) {
                return ;
            }
            // 將發(fā)送的消息更新到本地?cái)?shù)據(jù)庫并刷新UI
        }

        @Override
        public void onProgress(String msgId, int totalByte, int progressByte) {
        }
    });
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}

//將ECMessage對象傳入sendMessage方法進(jìn)行發(fā)送

                    

? 接收消息—我們假設(shè)John是"出彩中國人"群組中的一員,則代碼如下:

public void OnReceivedMessage(ECMessage msg) {
	if(msg == null) {
		return ;
	}
	// 接收到的IM消息,根據(jù)IM消息類型做不同的處理(IM消息類型:ECMessage.Type)
	ECMessage.Type type = msg.getType();
	if(type == ECMessage.Type.TXT) {
		// 在這里處理文本消息
		ECTextMessageBody textMessageBody = (ECTextMessageBody) msg.getBody();
	} else {

		String thumbnailFileUrl = null;
		String remoteUrl = null;
		if (type == ECMessage.Type.FILE) {
			// 在這里處理附件消息
			ECFileMessageBody fileMsgBody = (ECFileMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = fileMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.IMAGE) {
			// 在這里處理圖片消息
			ECImageMessageBody imageMsgBody = (ECImageMessageBody) msg.getBody();
			// 獲得縮略圖地址
			thumbnailFileUrl = imageMsgBody.getThumbnailFileUrl();
			// 獲得原圖地址
			remoteUrl = imageMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.VOICE) {
			// 在這里處理語音消息
			ECVoiceMessageBody voiceMsgBody = (ECVoiceMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = voiceMsgBody.getRemoteUrl();
		} else if (type == ECMessage.Type.VIDEO) {
			// 在這里處理語音消息
			ECVideoMessageBody videoMessageBody = (ECVideoMessageBody) msg.getBody();
			// 獲得下載地址
			remoteUrl = videoMessageBody.getRemoteUrl();
		} else if (type == ECMessage.Type.LOCATION) {
			// 在這里處理地理位置消息
			ECLocationMessageBody locationMessageBody = (ECLocationMessageBody) msg.getBody();
			// 獲得下載地址
			locationMessageBody.getLatitude(); // 緯度信息
			locationMessageBody.getLongitude();// 經(jīng)度信息
		} else {
			Log.e("ECSDK_Demo" , "Can't handle msgType=" + type.name()
					+ " , then ignore.");
			// 后續(xù)還會(huì)支持(自定義等消息類型)
		}

		if(TextUtils.isEmpty(remoteUrl)) {
			return ;
		}
		if(!TextUtils.isEmpty(thumbnailFileUrl)) {
			// 先下載縮略圖
		} else {
			// 下載附件
		}
	}
	// 根據(jù)不同類型處理完消息之后,將消息序列化到本地存儲(chǔ)(sqlite)
	// 通知UI有新消息到達(dá)

}

                    

3、群組操作

? 創(chuàng)建群組/討論組—我們假設(shè)Tony要?jiǎng)?chuàng)建一個(gè)名為"出彩中國人",具體代碼如下:

// 構(gòu)建群組參數(shù)
ECGroup group = new ECGroup();
// 設(shè)置群組名稱
group.setName("出彩中國人");
// 設(shè)置群組公告
group.setDeclare("歡迎體驗(yàn)云通訊群組功能");
// 設(shè)置群組類型,如:ECGroup.Scope.TEMP臨時(shí)群組(100人)
group.setScope(ECGroup.Scope.TEMP);;
// 設(shè)置群組驗(yàn)證權(quán)限,如:需要身份驗(yàn)證ECGroup.Permission.NEED_AUTH
group.setPermission(ECGroup.Permission.NEED_AUTH);
// 設(shè)置群組創(chuàng)建者(可以不設(shè)置,服務(wù)器默認(rèn)接口調(diào)用者為創(chuàng)建者)
group.setOwner("Tony的賬號");
//false代表是群組、true代表是討論組
group.setIsdiscuss(false);//是否是討論組
// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用創(chuàng)建群組接口,設(shè)置創(chuàng)建結(jié)果回調(diào)
groupManager.createGroup(group, new ECGroupManager.OnCreatGroupListener() {
    @Override
    public void onCreatGroupComplete(ECError error, ECGroup group) {
        if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
            // 群組/討論組創(chuàng)建成功
            // 緩存創(chuàng)建的群組/討論組到數(shù)據(jù)庫,同時(shí)通知UI進(jìn)行更新
            return ;
        }
        // 群組/討論組創(chuàng)建失敗
        Log.e("ECSDK_Demo" , "create group fail , errorCode=" 
+ error.errorCode);
    }

    @Override
    public void onComplete(ECError error) {
        // 不需要處理忽略
    }
});

                    

? 主動(dòng)加入—只要知道群組id,就可以主動(dòng)加入群組。

1、我們假設(shè)"出彩中國人"群組已經(jīng)有Tony和John兩位成員,現(xiàn)在Smith要加入"出彩中國人"群組,則代碼如下:

// 申請加入的群組id
String groupId = "出彩中國人群組ID";
// 設(shè)置申請加入理由
String declare = "Smith申請加入群組";
// 獲得SDK群組管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用審請加入群組接口,設(shè)置結(jié)果回調(diào)
groupManager.joinGroup(groupId, declare
        , new ECGroupManager.OnJoinGroupListener() {
    @Override
    public void onJoinGroupComplete(ECError error, String groupId) {
        if(SdkErrorCode.REQUEST_SUCCESS == error.errorCode)
                || SdkErrorCode.MEMBER_ALREADY_EXIST == error.errorCode)) {
            // 申請加入群組成功(SdkErrorCode.MEMBER_ALREADY_EXIST代表
申請者已經(jīng)是群組成員)
            // 根據(jù)申請的群組權(quán)限(permission字段)來區(qū)分
            // 是否直接加入成功或者需要管理員審核
            if(permission == 1) {
                // 群組申請不需要驗(yàn)證,直接加入
                // 這里可以跳轉(zhuǎn)到群組聊天界面、更新UI
                return;
            }
            Toast.makeText(Context , "申請加入群組成功,請等待管理員審核" ,
                    Toast.LENGTH_SHORT).show();
            return ;
        }
        // 群組申請失敗
        Log.e("ECSDK_Demo", "join group fail , errorCode="
                + error.errorCode);

    }

    @Override
    public void onComplete(ECError error) {
        // 不需要處理忽略
    }
});


                    

注意:如果群組"出彩中國人"是公開群組,則smith直接被允許加入。如果群組"出彩中國人"是私有群組
則smith加入需要群主Tony的的同意。

關(guān)于幾種群組的解釋:
公開群組:用戶可以直接被允許加入群組,不需要群主進(jìn)行驗(yàn)證;
驗(yàn)證群組:用戶加入群組的時(shí)候需要群主同意才可以加入
私有群組:只能群主邀請加入

Tony首先收到mith加入的請求,代碼如下:

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }
    // 有人申請加入群組(僅限于管理員)
    if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.PROPOSE) {
        ECProposerMsg proposerMsg = (ECProposerMsg) notice;
        // 處理申請加入群組請求通知
    }

}


                    

Tony同意Smith加入的請求,代碼如下:

// 創(chuàng)建回復(fù)驗(yàn)證參數(shù)響應(yīng)狀態(tài)
// ECAckType.AGREE:通過 ECAckType.REJECT:拒絕
ECAckType ackType = ECAckType.AGREE;
// 所屬的群組ID
String groupId = "出彩中國人群組ID";
// 申請者賬號ECProposerMsg.getProposer()
String proposer = "Smith的賬號";
// 獲得SDK群組管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用驗(yàn)證申請群組接口,設(shè)置結(jié)果回調(diào)
groupManager.ackJoinGroupRequest(groupId, proposer, ackType ,
        new ECGroupManager.OnAckJoinGroupRequestListener() {
            @Override
            public void onAckJoinGroupRequestComplete(ECError error
                    , String groupId, String member) {
                if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    // 回復(fù)群組申請成功
                    return ;
                }
                // 回復(fù)群組申失敗
                Log.e("ECSDK_Demo", "ack group apply fail , errorCode="
                        + error.errorCode);

            }

            @Override
            public void onComplete(ECError error) {
                // 忽略
            }
        }
);
                    

2、Smith加入成功后,群組中成員Tony和John收到的通知回調(diào)方法代碼如下:(參考Demo中的IMChattingHelper.java)

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }
    // 有人加入群組通知(群組成員)
    if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.JOIN) {
        ECJoinGroupMsg joinGroupMsg = (ECJoinGroupMsg) notice;
        // 處理某人加入群組通知
    }
} 

                    

? 邀請加入—只能群主邀請別人加入

1、我們假設(shè)"出彩中國人"群組的創(chuàng)建者Tony邀請Smith加入群組,則代碼如下:(參考Demo中的CreateGroupActivity.java)

// 設(shè)置群組ID
String groupId = "出彩中國人群組ID";
// 設(shè)置邀請加入理由
String declare = "Tony邀請Smith加入群組";
// 設(shè)置邀請加入的群組成員(可多選)
String[] members = new String[]{"Smith的賬號"};
// 是否需要對方確認(rèn)(NEED_CONFIRM 需要對方驗(yàn)證,F(xiàn)ORCE_PULL 不需要對方驗(yàn)證)
ECGroupManager.InvitationMode confirm = ECGroupManager.InvitationMode.NEED_CONFIRM;
// 獲得SDK群組管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用邀請加入群組接口,設(shè)置結(jié)果回調(diào)
groupManager.inviteJoinGroup(groupId , declare ,members , confim
        ,new ECGroupManager.OnInviteJoinGroupListener() {
    @Override
    public void onComplete(ECError error) {
        // 可以忽略不需要處理
    }

    @Override
    public void onInviteJoinGroupComplete(ECError error
            , String groupId, String[] members) {
        if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
            // 邀請加入成功 ,1默認(rèn)是直接就拉進(jìn)群組
            if(confim == 1) {
                // 直接拉進(jìn)群組,不需要被邀請成員是否同意
                return ;
            }
            Toast.makeText(Context , "邀請加入群組成功,請等待Smith驗(yàn)證" ,
                    Toast.LENGTH_SHORT).show();
            return ;
        }
        // 群組邀請成員失敗
        Log.e("ECSDK_Demo", "invite join group fail , errorCode="
                + error.errorCode);

    }
});
                    

注意:如果Tony邀請Smith加入的時(shí)候,接口參數(shù)不指定加入需要Smith確認(rèn),則smith直接被邀請加入。如果指定需要Smith
同意才能加入,則Smith收到如下通知回調(diào),并在回調(diào)里面回復(fù)"同意"或"拒絕"加入。代碼如下:

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }

    // 有人加入群組通知(群組成員)
    if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.INVITE) {
        ECInviterMsg inviterMsg = (ECInviterMsg) notice;
        // 處理群組管理員邀請加入群組通知
        String groupId = inviterMsg.getGroupId();
    }
} 

// 創(chuàng)建回復(fù)驗(yàn)證參數(shù)響應(yīng)狀態(tài)
// ECAckType.AGREE:通過 ECAckType.REJECT:拒絕
ECAckType ackType = ECAckType.AGREE;
// 所屬的群組ID
String groupId = "出彩中國人群組ID";
// 邀請者賬號(ECInviterMsg.getAdmin())
String inviter = "Tony的賬號";
// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用回復(fù)邀請加入群組接口,設(shè)置結(jié)果回調(diào)
groupManager.ackInviteJoinGroupRequest(groupId, ackType,inviter,
        new ECGroupManager.OnAckInviteJoinGroupRequestListener() {
            @Override
            public void onAckInviteJoinGroupRequestComplete(ECError error , 
                                                            String groupId) {
                if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    // 回復(fù)群組邀請成功
                    return;
                }
                // 回復(fù)群組邀請失敗
                Log.e("ECSDK_Demo", "ack group apply fail , errorCode="
                        + error.errorCode);

            }

            @Override
            public void onComplete(ECError error) {
                // 忽略
            }
        }
);

                    

2、Smith加入成功后,群組中成員Tony和John收到的通知回調(diào)方法代碼如下:(參考Demo中的IMChattingHelper.java)

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }

    // 有人加入群組通知(群組成員)
    if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.JOIN) {
        ECJoinGroupMsg joinGroupMsg = (ECJoinGroupMsg) notice;
        // 處理某人加入群組通知
    }
}
                    

? 退出群組

1、我們假設(shè)Smith要退出群組,則代碼如下:

// 設(shè)置需要退出的群組id
String groupId = "出彩中國人群組ID";
// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用退出群組接口,設(shè)置結(jié)果回調(diào)
groupManager.quitGroup(groupId, new ECGroupManager.OnQuitGroupListener() {
    @Override
    public void onQuitGroupComplete(ECError error, String groupId) {
        if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
            // 退出群組成功
            // 這里可以刪除本地群組緩存,刪除群組聊天紀(jì)錄等
            return;
        }
        // 退出群組失敗
        Log.e("ECSDK_Demo", "quit group fail , errorCode="
                + error.errorCode);
    }
    @Override
    public void onComplete(ECError error) {
        // 忽略
    }
});
                    

2、Smith退出成功后,群組中成員Tony和John收到的通知回調(diào)方法代碼如下:(參考Demo中的IMChattingHelper.java)

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }

    // 有人退出群組通知(群組成員)
    if (notice.getType() == ECGroupNoticeMessage.ECGroupMessageType.QUIT) {
        ECQuitGroupMsg quitGroupMsg = (ECQuitGroupMsg) notice;
        // 處理某人退出群組通知
    }
}
                    

? 群主踢人

1、我們假設(shè)群主Tony要把Smith要踢出群組,則代碼如下:

// Smith所在的群組id
String grouId = "出彩中國人群組ID";
// Smith賬號
String member = "Smith的賬號";
// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用群組移除成員接口,設(shè)置結(jié)果回調(diào)
groupManager.deleteGroupMember(grouId, member,
        new ECGroupManager.OnDeleteGroupMembersListener() {
    @Override
    public void onDeleteGroupMembersComplete(ECError error
            , String groupId, String members) {
        if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS){
            // 移除成員成功
            // 將Smith賬號從本地群組關(guān)聯(lián)關(guān)系中移除
            // 通知UI更新
            return;
        }
        // 退出群組失敗
        Log.e("ECSDK_Demo", "remove group member fail " +
                ", errorCode=" + error.errorCode);

    }

    @Override
    public void onComplete(ECError error) {
        // 忽略不處理
    }
});
 
                    

2、群組中所有成員都會(huì)收到的Smith被踢的消息,包括Smith自己,Smith判斷被踢用戶的id等于自己,
則從本地刪除群組,此通知回調(diào)方法代碼如下:(參考Demo中的IMChattingHelper.java)

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }

    // 有人被移除出群組
    if (notice.getType() == 
            ECGroupNoticeMessage.ECGroupMessageType.REMOVE_MEMBER) {
        ECRemoveMemberMsg removeMemberMsg = (ECRemoveMemberMsg) notice;
        // 處理群組移除成員通知
        if ("Smith賬號".equals(removeMemberMsg.getMember())) {
            // 如果是自己則將從本地群組關(guān)聯(lián)關(guān)系中移除
            // 通知UI處理刷新
        }

    }
}
                    

? 解散群組—只有群主才能解散群組。

1、我們假設(shè)群主Tony要解散"出彩中國人",則代碼如下:

// 被解散的群組id
String grouId = "出彩中國人群組ID";
// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用群組移解散接口,設(shè)置結(jié)果回調(diào)
groupManager.deleteGroup(groupId, new ECGroupManager.OnDeleteGroupListener() {
    @Override
    public void onDeleteGroupComplete(ECError error, String groupId) {
        if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS){
            // 群組解散成功
            // 將群組信息從本地緩存中刪除 通知UI更新
            return;
        }
        // 解散群組失敗
        Log.e("ECSDK_Demo", "del group fail " +
                ", errorCode=" + error.errorCode);

    }

    @Override
    public void onComplete(ECError error) {
        // 忽略不處理
    }
});


                    

2、群組中所有成員收到的通知回調(diào)方法代碼如下:

@Override
//該通知回調(diào)接口是初始化時(shí)設(shè)置的 
"設(shè)置SDK接收消息回調(diào)"—OnChatReceiveListener
public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) {
    if (notice == null) {
        return;
    }
    // 群組被解散
    if (notice.getType() ==ECGroupNoticeMessage.ECGroupMessageType.DISMISS) {
        ECDismissGroupMsg dismissGroupMsg = (ECDismissGroupMsg) notice;
        // 處理群組被解散通知
        // 將群組從本地緩存中刪除并通知UI刷新
    }
}
                    

? 獲取群成員—代碼如下:(參考Demo中的GroupMemberService.java)

// 需要獲取群組成員的群組id
String grouId = "出彩中國人群組ID";
// 獲得SDK群組管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用獲取群組成員接口,設(shè)置結(jié)果回調(diào)
groupManager.queryGroupMembers(groupId,
        new ECGroupManager.OnQueryGroupMembersListener() {
            @Override
            public void onQueryGroupMembersComplete(ECError error
                    , List<ECGroupMember> members) {
                if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS 
&& members != null) {
                    // 獲取群組成員成功
                    // 將群組成員信息更新到本地緩存中(sqlite) 通知UI更新
                    return;
                }
                // 群組成員獲取失敗
                Log.e("ECSDK_Demo", "sync group detail fail " +
                        ", errorCode=" + error.errorCode);

            }

            @Override
            public void onComplete(ECError error) {
                // 忽略不處理
            }
        }
);


                    

? 群組搜索—可以根據(jù)群組名字或者群組ID來搜索群組(群組名稱為純數(shù)字或純字母時(shí)需要輸入完整的群名稱) ,代碼如下。 (參考Demo中的SearchGroupActivity.java)

// 創(chuàng)建查詢參數(shù)規(guī)則(按照群組id檢索)
ECGroupMatch match = new ECGroupMatch(ECGroupMatch.SearchType.GROUPID);
// 設(shè)置檢索詞(根據(jù)匹配規(guī)則輸入群組I的或者名稱)
match.setkeywords("出彩的中國人");
// 獲得SDK群組管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用檢索群組接口,設(shè)置結(jié)果回調(diào)
groupManager.searchPublicGroups(match, 
        new ECGroupManager.OnSearchPublicGroupsListener() {
    @Override
    public void onSearchPublicGroupsComplete(ECError error
            , List<ECGroup> groups) {
        if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS && groups != null){
            // 檢索群組成功
            // 根據(jù)查詢到的群組選擇是否申請加入群組
            return;
        }
        // 檢索群組取失敗
        Log.e("ECSDK_Demo", "search group fail " +
                ", errorCode=" + error.errorCode);

    }

    @Override
    public void onComplete(ECError error) {
        // 忽略不需要處理
    }
});


                    

? 獲取個(gè)人所在的群組—用戶登錄后,通常首先調(diào)取此接口獲取自己所在群組/討論組,此接口會(huì)返回群組的
id、名稱、免打擾狀態(tài)等信息,其示例代碼如下:

// 獲得SDK群組創(chuàng)建管理類
ECGroupManager groupManager = ECDevice.getECGroupManager();
// 調(diào)用查詢個(gè)人加入的群組接口,設(shè)置結(jié)果回調(diào)
//Target.Group是群組,Target.Discussion是討論組
groupManager.queryOwnGroups(new ECGroupManager.OnQueryOwnGroupsListener() {
    @Override
    public void onQueryOwnGroupsComplete(ECError error, List groups){
        if(SdkErrorCode.REQUEST_SUCCESS == error.errorCode) {
            // 請求成功
            // 進(jìn)行本地?cái)?shù)據(jù)庫與服務(wù)器數(shù)據(jù)同步
            // 刪除不存在或者沒有加入的群組
            return ;
        }

        // 查詢個(gè)人加入的群組失敗
        Log.e("ECSDK_Demo", "query own groups fail " +
                ", errorCode=" + error.errorCode);

    }

    @Override
    public void onComplete(ECError error) {
        // 忽略
    }
});

                    

4、離線消息

1、用戶登錄以后,應(yīng)該首先獲取自己的云通訊服務(wù)端的離線條數(shù),具體代碼如下:(參考Demo中的IMChattingHelper.java)

@Override
public void onOfflineMessageCount(int count) {
    // 注冊SDK的參數(shù)需要設(shè)置如下才能收到該回調(diào)
    // ECInitParams.setOnChatReceiveListener(new OnChatReceiveListener());
    // count參數(shù)標(biāo)識(shí)當(dāng)前賬號的離線消息數(shù)
}


                    

2、根據(jù)總的離線條數(shù),決定獲取多少條離線消息,具體代碼如下:如下:(參考Demo中的IMChattingHelper.java)

@Override
public int onGetOfflineMessage() {
    // 注冊SDK的參數(shù)需要設(shè)置如下才能收到該回調(diào)
    // ECInitParams.setOnChatReceiveListener(new OnChatReceiveListener());
    // 建議根據(jù)onHistoryMessageCount(int count)設(shè)置接收的離線消息數(shù)
// 消息數(shù) ECDevice.SYNC_OFFLINE_MSG_ALL:全部獲取 0:不獲取
    return count;
} 


                    

3、客戶端處理 SDk拉取的離線消息

@Override
public void onReceiveOfflineMessage(List<ECMessage> msgs) {
    // 離線消息的處理可以參考 void OnReceivedMessage(ECMessage msg)方法
    // 處理邏輯完全一樣
    // 參考 IMChattingHelper.java
}


                    

4、客戶端處理離線消息拉取完成通知

@Override
public void onReceiveOfflineMessageCompletion() {
    // SDK離線消息拉取完成之后會(huì)通過該接口通知應(yīng)用
    // 應(yīng)用可以在此做類似于Loading框的關(guān)閉,Notification通知等等
}

                    

5、自定義消息

自定義消息通過發(fā)送文本消息接口擴(kuò)展字段來實(shí)現(xiàn),具體說明如下:(參考Demo中的ChattingActivity.java)



try {
    // 組建一個(gè)待發(fā)送的ECMessage
    ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT);
    //設(shè)置消息的屬性:發(fā)出者,接受者,發(fā)送時(shí)間等
    msg.setForm("Tony的賬號");
    msg.setMsgTime(System.currentTimeMillis());
    // 設(shè)置消息接收者
    msg.setTo("John的賬號");
    msg.setSessionId("John的賬號");
    // 設(shè)置消息發(fā)送類型(發(fā)送或者接收)
    msg.setDirection(ECMessage.Direction.SEND);
    // 創(chuàng)建一個(gè)文本消息體,并添加到消息對象中
    // 文本消息由用戶自定義組裝,接收端按照規(guī)則解析
    ECTextMessageBody msgBody = new ECTextMessageBody("Location");
    msg.setBody(msgBody);
    
    // 設(shè)置自定義消息類型如:(位置)
    msg.setUserData("msgType://Location");
    // 調(diào)用SDK發(fā)送文本接口發(fā)送消息到服務(wù)器
    // 參考發(fā)送文本消息
} catch (Exception e) {
    // 處理發(fā)送異常
    Log.e("ECSDK_Demo", "send message fail , e=" + e.getMessage());
}
                    

6、設(shè)置個(gè)人信息

可以通過接口設(shè)置個(gè)人信息,包括昵稱、生日、性別,建議昵稱必須設(shè)置,以便在推送消息的時(shí)候使用,具體代碼如下:
(參考Demo中的SettingPersionInfoActivity.java)

				
        PersonInfo personInfo =new PersonInfo();
        // 設(shè)置生日(格式:2015-5-13);
        personInfo.setBirth("2015-5-13");
        // 設(shè)置昵稱
        personInfo.setNickName("Tony");
        // 設(shè)置性別(男:1 , 女:2)
        personInfo.setSex("1");
        // 設(shè)置備注
        personInfo.setSign("你好,我是Tony");
	
        ECDevice.setPersonInfo(personInfo, new ECDevice.OnSetPersonInfoListener() {
            @Override
            public void onSetPersonInfoComplete(ECError e, int version) {
             if (SdkErrorCode.REQUEST_SUCCESS == error.errorCode) {
            // 個(gè)人信息設(shè)置成功,version最新的個(gè)人信息版本號
            // 更新個(gè)人信息到本地?cái)?shù)據(jù)庫,通知UI刷新
            return;
             }
           Log.e("ECSDK_Demo", "set person info fail  " +
                ", errorCode=" + e.errorCode);
    }
});
                    

7、獲取個(gè)人信息

獲取個(gè)人信息代碼如下:(參考Demo中的IMChattingHelper.java)

// 調(diào)用查詢個(gè)人信息接口,設(shè)置結(jié)果回調(diào)
ECDevice.getPersonInfo(userId, new ECDevice.OnGetPersonInfoListener() {
   @Override
   public void onGetPersonInfoComplete(ECError e, PersonInfo p){
        if(SdkErrorCode.REQUEST_SUCCESS == error.errorCode) {
            // 個(gè)人信息獲取成功
            // 更新個(gè)人信息到本地?cái)?shù)據(jù)庫,通知UI刷新
            return ;
        }
        Log.e("ECSDK_Demo", "get person info fail  " +
                ", errorCode=" + e.errorCode);
    }
});
                    

8、設(shè)置免打擾

    /**
     * SDK增加設(shè)置免打擾接口 獲取免打擾列表為服務(wù)器rest接口
     * @param userId    用戶id
     * @param enable    免打擾使能
     * @param l         免打擾列表
     */
    ECDevice.setMuteNotification("uid", true, new ECDevice.OnSetDisturbListener() {
            @Override
            public void onResult(ECError ecError) {
                //返回設(shè)置成功錯(cuò)誤碼
            }
        });
                    

文檔更新時(shí)間:2017年12月12日

主站蜘蛛池模板: 成人免费视频网站在线观看 | 天天干视频在线 | 中文字幕亚洲区一区二 | av免费入口 | 亚洲精品一二三区 | 久久久久亚洲精品 | 欧美亚洲免费 | 日韩欧美一区二区三区在线播放 | 看av片网站 | 国产女人叫床高潮大片免费 | 亚洲精品视频一区 | 精品视频在线观看 | 亚洲视频二区 | 亚洲视频 欧美视频 | 国产区在线免费观看 | 亚洲五码久久 | 国产视频导航 | 欧美精品一区二区三区在线播放 | 91精品国产91久久久久久密臀 | 国产清纯白嫩初高生在线播放视频 | 国产精品久久久久久中文字 | 国产一级在线 | 日本特黄a级高清免费大片 成年人黄色小视频 | 激情综合五月天 | 成人影 | 日韩精品成人av | 精品乱子伦一区二区三区 | 羞视频在线观看 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 欧美日韩一区在线观看 | 国产高清视频一区 | 免费中文字幕 | 97成人在线 | 国产精品99精品久久免费 | 国产在线成人 | 欧美日韩在线一区二区三区 | 午夜成人免费视频 | 九九热这里只有精品在线观看 | 精品av | 精品美女在线观看视频在线观看 | 国户精品久久久久久久久久久不卡 |