文章目录
  1. 1. 登陆
  2. 2. 注销
  3. 3. 发送文本消息
  4. 4. 发送语音消息
  5. 5. 发送图片消息
  6. 6. 发送地理位置消息
  7. 7. 发送文件消息
  8. 8. 接收消息
  9. 9. 获取聊天记录
  10. 10. 获取未读消息数量
  11. 11. 未读消息清零
  12. 12. 清空会话记录
  13. 13. 删除聊天记录
  14. 14. 设置自定义的消息提示
  15. 15. 设置notification点击跳转的intent
  16. 16. 好友列表
  17. 17. 添加好友
  18. 18. 删除好友
  19. 19. 同意好友请求
  20. 20. 拒绝好友请求
  21. 21. 监听好友请求
  22. 22. 获取黑名单
  23. 23. 加入黑名单
  24. 24. 从黑名单中移除
  25. 25. 网络异常监听

环信单聊API

登陆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
EMChatManager.getInstance().login(userName,password,new EMCallBack(){
@Override
public void onSuccess() {
runOnUiTread(new Runnable(){
public void run(){
// 成功
}
});
}
@Override
public void onProgress(int progress,String status) {

}
@Override
public void onError(int code,String message) {
// 失败
}
});

注销

1
EMChatManager.getInstance().login();

发送文本消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 获取会话
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 创建文本消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
// 设置为群聊聊
message.setChatType(ChatType.GroupChat);
// 设置消息
TextMessageBody txtBody = new TextMessageBody(content);
message.addBody(txtBody);
// 设置接收人
message.setReceipt(username);
// 把消息加入到会话中
conversation.addMessage(message);
// 发送消息
EMChatManager.getInstance().sendMessage(message,new EMCallBack());

发送语音消息

1
2
3
4
5
6
7
8
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.VOICE);
// 设置为群聊
VoiceMessageBody body = new VoiceMessageBody(new File(filePath), len);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack());

发送图片消息

1
2
3
4
5
6
7
8
9
10
11
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.IMAGE);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
ImageMessageBody body = new ImageMessageBody(new File(filePath));
// 默认超过100k的图片会压缩后发给对方,可以设置成发送原图
// body.setSendOriginalImage(true);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack());

发送地理位置消息

1
2
3
4
5
6
7
8
9
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.LOCATION);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
LocationMessageBody locBody = new LocationMessageBody(locationAddress, latitude, longitude);
message.addBody(locBody);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack());

发送文件消息

1
2
3
4
5
6
7
8
9
10
11
12
13
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 创建一个文件消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.FILE);
// 如果是群聊,设置chattype,默认是单聊
if (chatType == CHATTYPE_GROUP)
message.setChatType(ChatType.GroupChat);
//设置接收人的username
message.setReceipt(username);
// add message body
NormalFileMessageBody body = new NormalFileMessageBody(new File(filePath));
message.addBody(body);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack());

接收消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);

private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//消息id
String msgId = intent.getStringExtra("msgid");
//发消息的人的username(userid)
String msgFrom = intent.getStringExtra("from");
//消息类型,文本,图片,语音消息等,这里返回的值为msg.type.ordinal()。
//所以消息type实际为是enum类型
int msgType = intent.getIntExtra("type", 0);
//消息body,为一个json字符串
String msgBody = intent.getStringExtra("body");
Log.d("main", "new message id:" + msgId + " from:" + msgFrom + " type:" + msgType + " body:" + msgBody);

//更方便的方法是通过msgId直接获取整个message
EMMessage message = EMChatManager.getInstance().getMessage(msgId);

}
}

获取聊天记录

1
2
3
4
5
6
7
8
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
//获取此会话的所有消息
List<EMMessage> messages = conversation.getAllMessages();
//sdk初始化加载的聊天记录为20条,到顶时需要去db里获取更多
//获取startMsgId之前的pagesize条消息,此方法获取的messages sdk会自动存入到此会话中,app中无需再次把获取到的messages添加到会话中
List<EMMessage> messages = conversation.loadMoreMsgFromDB(startMsgId, pagesize);
//如果是群聊,调用下面此方法
List<EMMessage> messages = conversation.loadMoreGroupMsgFromDB(startMsgId, pagesize);

获取未读消息数量

1
2
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
conversation.getUnreadMsgCount();

未读消息清零

1
2
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
conversation.resetUnsetMsgCount();

清空会话记录

1
2
//清空和某个user的聊天记录,不删除整个会话
EMChatManager.getInstance().clearConversation(username);

删除聊天记录

1
2
3
4
5
//删除和某个user的整个的聊天记录
EMChatManager.getInstance().deleteConversation(username);
//删除当前会话的某条聊天记录
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
conversation.removeMessage(deleteMsg.msgId);

设置自定义的消息提示

App在后台时,新消息会通过notification提示,可以把提示的内容换成自定义的内容,在Application中的onCreate()里设置

1
2
3
4
5
6
7
8
9
10
11
12
13
// 获取到options对象
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
// 设置自定义的文字提醒
options.setNotifyText(new OnMessageNotifyListener() {
@Override
public String onNewMessageNotify(EMMessage message){
return message.getFrom() + "发来了一条消息";
}
@Override
public String onLatestMessageNotify(EMMessage message,int fromUserNum,int messageNum) {
return fromUserNum + "个好友发来了" + messgaeNum + "条消息";
}
});

设置notification点击跳转的intent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
options.setOnNotificationClickListener(new OnNotificationClickListener(){
@Override
public Intent onNotificationClick(EMMessage message) {
Intent intent = new Intent(applicationContext,ChatActivity.class);
ChatType chatType = message.getChatType();
if(chatType == ChatType.chat){
intent.putExtra("userId", message.getFrom());
intent.putExtra("chatType", ChatActivity.CHATTYPE_SINGLE);
} else {
//message.getTo()为群聊id
intent.putExtra("groupId", message.getTo());
intent.putExtra("chatType", ChatActivity.CHATTYPE_GROUP);
}
return intent;
}
});

好友列表

1
List<String> usernames = EMChatManager.getInstance().getContactUesrNames();

添加好友

1
2
//参数为要添加的好友的username和添加理由
EMContactManager.getInstance().addContact(toAddUsername, reason);

删除好友

1
EMContactManager.getInstance().deleteContact(username);

同意好友请求

1
2
//同意username的好友请求
EMChatManager.getInstance().acceptInvitation(username);

拒绝好友请求

1
EMChatManager.getInstance().refuseInvitation(username);

监听好友请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
EMContactManager.getInstance().setContactListener(new EMContactListener() {

@Override
public void onContactAgreed(String username) {
//好友请求被同意
}

@Override
public void onContactRefused(String username) {
//好友请求被拒绝
}

@Override
public void onContactInvited(String username, String reason) {
//收到好友邀请
}

@Override
public void onContactDeleted(List<String> usernameList) {
//被删除时回调此方法
}


@Override
public void onContactAdded(List<String> usernameList) {
//增加了联系人时回调此方法
}
});

获取黑名单

1
2
//获取黑名单用户的usernames
EMContactManager.getInstance().getBlackListUsernames();

加入黑名单

1
2
3
//第二个参数如果为true,则把用户加入到黑名单后双方发消息时对方都收不到;false,则
//我能给黑名单的中用户发消息,但是对方发给我时我是收不到的
EMContactManager.getInstance().addUserToBlackList(username,true);

从黑名单中移除

1
EMContactManager.getInstance().deleteUserFromBlackList(username);

网络异常监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//注册一个监听连接状态的listener
EMChatManager.getInstance().addConnectionListener(new MyConnectionListener());

//实现ConnectionListener接口
private class MyConnectionListener implements ConnectionListener{

@Override
public void onConnected() {

}

@Override
public void onDisConnected(String errorString) {
if(errorString!=null&&errorString.contains("conflict"))
{
//收到帐号在其他手机登录
// TODO
}else{

//"连接不到聊天服务器"
}
}

@Override
public void onReConnected() {

}

@Override
public void onReConnecting() {
}

@Override
public void onConnecting(String progress) {

}

}
文章目录
  1. 1. 登陆
  2. 2. 注销
  3. 3. 发送文本消息
  4. 4. 发送语音消息
  5. 5. 发送图片消息
  6. 6. 发送地理位置消息
  7. 7. 发送文件消息
  8. 8. 接收消息
  9. 9. 获取聊天记录
  10. 10. 获取未读消息数量
  11. 11. 未读消息清零
  12. 12. 清空会话记录
  13. 13. 删除聊天记录
  14. 14. 设置自定义的消息提示
  15. 15. 设置notification点击跳转的intent
  16. 16. 好友列表
  17. 17. 添加好友
  18. 18. 删除好友
  19. 19. 同意好友请求
  20. 20. 拒绝好友请求
  21. 21. 监听好友请求
  22. 22. 获取黑名单
  23. 23. 加入黑名单
  24. 24. 从黑名单中移除
  25. 25. 网络异常监听