环信提供了一套IM SDK,可以很方便的在App中集成IM功能
添加权限和App Key
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<meta-data android:name="EASEMOB_APPKEY" android:value="xxxx# mychatdemo" />
|
初始化
在自定义的Application中初始化,确保应用程序一开始就得到运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); EMChat.getInstance().init(this);
EMChatOptions options = EMChatManager.getInstance().getChatOptions(); options.setAcceptInvitationAlways(false); options.setNotificationEnable(flase); options.setNoticeBySound(false); options.setNoticedByVibrate(false); options.setUseSpeaker(false); } }
|
注册
1 2
| String appkey = EMChatConfig.getInstance().APPKEY; EMChatManager.getInstance().createAccountOnServer(appkey + "_" + username, pwd);
|
登陆
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| EMChatManager.getInstance().login(username,password,new EMCallBack() { @Override public void onSuccess() {
} @Override public void onProgress(int progress,String status) {
} @Override public void onError(int code,String message) {
} });
|
监听消息
接收聊天消息,回执消息,好友同意,好友请求等
1 2 3 4
| msgReceiver = new NewMessageBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastReceiver()); intentFilter.setPriorty(3); registerReceiver(msgReceiver,intentFilter);
|
1 2 3
| IntentFilter ackMessageIntentFilter = new IntentFilter(EMChatManager.getInstance().getAckMessageBroadcastAction()); ackMessageIntentFilter.setPriority(3); registerReceiver(ackMessageReceiver, ackMessageIntentFilter);
|
1 2
| IntentFilter inviteIntentFilter = new IntentFilter(EMChatManager.getInstance().getContactInviteEventBroadcastAction()); registerReceiver(contactInviteReceiver, inviteIntentFilter);
|
1
| EMContactManager.getInstance().setContactListener(new MyContactListener());
|
1
| EMChatManager.getInstance().addConnectionListener(new MyConnectionListener());
|
发送消息
1 2 3 4 5 6 7 8 9 10 11 12
| EMMessage msg = EMMessage.createSendMessage(EMMessage.Type.TXT);
msg.setReceipt(username); TextMessageBody body = new TextMessageBody(tvMsg.getText().toString()); msg.addBody(body); try { EMChatManager.getInstance().sendMessage(msg); } catch (Exception e) { e.printStackTrace(); }
|
接收消息
1 2 3 4 5 6 7 8 9 10 11 12 13
| private class NewMessageBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String msgId = intent.getStringExtra("msgid"); ...... ...... ......
abortBroadcast(); } }
|
消息回执
1 2 3 4 5 6 7 8 9 10 11 12
| private BroadcastReceiver ackMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String msgId = intent.getStringExtra("msgid"); ...... ...... ...... abortBroadcast(); } };
|
联系人变化
1 2 3 4 5 6 7 8
| private class MyContactListener implements EMContactListener{ @Override public void onContactAdded(List<String> usernameList) { } @Override public void onContactDeleted(List<String> usernameList) { } }
|
连接状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| private class MyConnectionListener implements ConnectionListener{ @Override public void onConnected() { } @Override public void onDisConnected(String errorString) { if(errorString!=null&&errorString.contains("conflict")) { }else{ } } @Override public void onReConnected() { } @Override public void onReConnecting() { } @Override public void onConnecting(String progress) { } }
|
退出登陆
1 2 3 4 5 6
| @Override protected void onPause() { super.onPause(); EMChatManager.getInstance().logout(); }
|
设置昵称
1
| EMChatManager.getInstance().updateCurrentUserNick(nickname);
|
例子
ChatDemo