1.导入包

http://docs.easemob.com/doku.php?id=start:200androidcleintintegration:10androidsdkimport

在清单文件AndroidManifest.xml里加入以下权限,以及写上你注册的appkey

1.权限配置:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="Your Package"
  4. android:versionCode="100"
  5. android:versionName="1.0.0">
  6.  
  7. <!-- Required -->
  8. <uses-permission android:name="android.permission.VIBRATE" />
  9. <uses-permission android:name="android.permission.INTERNET" />
  10. <uses-permission android:name="android.permission.RECORD_AUDIO" />
  11. <uses-permission android:name="android.permission.CAMERA" />
  12. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  13. <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
  14. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  15. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  16. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  17. <uses-permission android:name="android.permission.GET_TASKS" />
  18. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  19. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  20. <uses-permission android:name="android.permission.WAKE_LOCK" />
  21. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
  22. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  23.  
  24. 应用包名及appkey替换:
  25. <application
  26. android:icon="@drawable/ic_launcher"
  27. android:label="@string/app_name"
  28. android:name="Your Application">
  29.  
  30. <!-- 设置环信应用的appkey -->
  31. <meta-data android:name="EASEMOB_APPKEY" android:value="Your AppKey" />
  32. <!-- 声明sdk所需的service SDK核心功能-->
  33. <service android:name="com.easemob.chat.EMChatService" />
  34. </application>
  35. </manifest>

2.初始化SDK

要求在application的oncreate方法中做初始化

  1. EMChat.getInstance().init(applicationContext);
  2.  
  3. /**
  4. * debugMode == true 时为打开,sdk 会在log里输入调试信息
  5. * @param debugMode
  6. * 在做代码混淆的时候需要设置成false
  7. */
  8. EMChat.getInstance().setDebugMode(true);
  9.  
  10. //在做打包混淆时,要关闭debug模式,避免消耗不必要的资源

3.注册

注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。

开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号, 授权注册的流程应该是您服务器通过环信提供的rest api注册,之后保存到您的服务器或返回给客户端。

注册用户名会自动转为小写字母,所以建议用户名均以小写注册(强烈建议开发者通过后台调用rest接口去注册环信id,客户端注册方法不提倡使用)

  1. new Thread(new Runnable() {
  2. public void run() {
  3. try {
  4. // 调用sdk注册方法
  5. EMChatManager.getInstance().createAccountOnServer(username, pwd);
  6. } catch (final EaseMobException e) {
  7. //注册失败
  8. int errorCode=e.getErrorCode();
  9. if(errorCode==EMError.NONETWORK_ERROR){
  10. Toast.makeText(getApplicationContext(), "网络异常,请检查网络!", Toast.LENGTH_SHORT).show();
  11. }else if(errorCode==EMError.USER_ALREADY_EXISTS){
  12. Toast.makeText(getApplicationContext(), "用户已存在!", Toast.LENGTH_SHORT).show();
  13. }else if(errorCode==EMError.UNAUTHORIZED){
  14. Toast.makeText(getApplicationContext(), "注册失败,无权限!", Toast.LENGTH_SHORT).show();
  15. }else{
  16. Toast.makeText(getApplicationContext(), "注册失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
  17. }
  18. }
  19. }).start();

4.登录

登陆聊天服务器

需要注意: 登陆成功后需要调用

  1. EMGroupManager.getInstance().loadAllGroups();

从本地数据库加载群组到内存的操作,如果你的应用中有群组,请加上这句话(要求在每次进入应用的时候调用)

  1. EMChatManager.getInstance().loadAllConversations();

从本地数据库加载聊天记录到内存的操作(强烈建议在每次进入应用的时候调用) 以上两个方法是为了保证进入主页面后本地会话和群组都load完毕。另外如果登陆过,app长期在后台再进的时候也可能会导致加载到内存的群组和会话为 空,可以在主页面的oncreate里也加上这两句代码,当然,更好的办法应该是放在程序的开屏页,可参考demo的SplashActivity。

  1. EMChatManager.getInstance().login(userName,password,new EMCallBack() {//回调
  2. @Override
  3. public void onSuccess() {
  4. runOnUiThread(new Runnable() {
  5. public void run() {
  6. EMGroupManager.getInstance().loadAllGroups();
  7. EMChatManager.getInstance().loadAllConversations();
  8. Log.d("main", "登陆聊天服务器成功!");
  9. }
  10. });
  11. }
  12.  
  13. @Override
  14. public void onProgress(int progress, String status) {
  15.  
  16. }
  17.  
  18. @Override
  19. public void onError(int code, String message) {
  20. Log.d("main", "登陆聊天服务器失败!");
  21. }
  22. });

自动登录

即首次登录成功后,不需要再次调用登录方法,在下次app启动时,SDK会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。 配置是否进行自动登录

SDK中自动登录属性默认是true打开的,如果不需要自动登录,在初始化SDK之前,调用

  1. EMChat.getInstance().setAutoLogin(false);

设置为false关闭

自动登录

自动登录在以下几种情况下会被取消

用户调用了SDK的登出动作;

用户在别的设备上更改了密码, 导致此设备上自动登陆失败;

用户的账号被从服务器端删除;

用户从另一个设备登录,把当前设备上登陆的用户踢出.

重连

当掉线时,Android SDK会自动重连,无需进行任何操作。

  1. //注册一个监听连接状态的listener
  2. EMChatManager.getInstance().addConnectionListener(new MyConnectionListener());
  3.  
  4. //实现ConnectionListener接口
  5. private class MyConnectionListener implements EMConnectionListener {
  6. @Override
  7. public void onConnected() {
  8. //已连接到服务器
  9. }
  10. @Override
  11. public void onDisconnected(final int error) {
  12. runOnUiThread(new Runnable() {
  13.  
  14. @Override
  15. public void run() {
  16. if(error == EMError.USER_REMOVED){
  17. // 显示帐号已经被移除
  18. }else if (error == EMError.CONNECTION_CONFLICT) {
  19. // 显示帐号在其他设备登陆
  20. } else {
  21. if (NetUtils.hasNetwork(MainActivity.this))
  22. //连接不到聊天服务器
  23. else
  24. //当前网络不可用,请检查网络设置
  25. }
  26. }
  27. });
  28. }
  29. }

退出聊天登陆

  1. EMChatManager.getInstance().logout();//此方法为同步方法
  1. //此方法为异步方法
  2. EMChatManager.getInstance().logout(new EMCallBack() {
  3.  
  4. @Override
  5. public void onSuccess() {
  6. // TODO Auto-generated method stub
  7.  
  8. }
  9.  
  10. @Override
  11. public void onProgress(int progress, String status) {
  12. // TODO Auto-generated method stub
  13.  
  14. }
  15.  
  16. @Override
  17. public void onError(int code, String message) {
  18. // TODO Auto-generated method stub
  19.  
  20. }
  21. });

好友管理


获取好友列表

如果使用环信的好友体系需要先设置 EMChatManager.getInstance().getChatOptions().setUseRoster(true)

获取好友的username list,开发者需要根据username去自己服务器获取好友的详情

List<String> usernames = EMContactManager.getInstance().getContactUserNames();//需异步执行

查找好友

SDK不提供好友查找的服务, 如需要查找好友, 需要调用开发者自己服务器的用户查询接口

为了保证查找到的好友可以添加, 需要将用户自己服务器的用户数据库, 通过SDK的后台接口导入到SDK服务器中

添加好友

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

删除好友

EMContactManager.getInstance().deleteContact(username);//需异步处理

同意好友请求

//同意username的好友请求
EMChatManager.getInstance().acceptInvitation(username);//需异步处理

拒绝好友请求

EMChatManager.getInstance().refuseInvitation(username);//需异步处理

监听好友状态事件

  1. EMChat.getInstance().setAppInited();
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) {
       //增加了联系人时回调此方法
   }
});

黑名单

获取黑名单列表

/**
* 从本地获取黑名单中的用户的usernames
*
* @return
* @throws EaseMobException
*/
EMContactManager.getInstance().getBlackListUsernames();

把用户加入到黑名单

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

把用户从黑名单中移除

EMContactManager.getInstance().deleteUserFromBlackList(username);//需异步处理

Demo及SDK下载

www.easemob.com/downloads

  1.  

Android 环信的使用的更多相关文章

  1. Android 环信(Android)设置头像和昵称的方法

    最近,经常有朋友问到,如何集成环信头像,怎么才能快速显示头像,因时间紧急,很多朋友都没有时间慢慢的研究代码,这里大家稍微花10分钟看一下文章,看完后再花5分钟改一下代码,即可达到你们所要的效果. 当然 ...

  2. Android 环信聊天头像昵称显示解决方案

    从消息扩展中获取昵称和头像 昵称和头像的获取:把用户基本的昵称和头像的URL放到消息的扩展中,通过消息传递给接收方,当收到一条消息时,则能通过消息的扩展得到发送者的昵称和头像URL,然后保存到本地数据 ...

  3. Android环信即时通讯集成坑爹 注册报错208解决

    第一种情况:    你用的环信APPkey 是授权模式的   只要改成开放模式就可以了 第二种情况:    上述情况在环信官网都有说明  但是这种情况  环信官网就没得说明   只说的是同步方法 注册 ...

  4. 关于 android 环信无法正确获取昵称的问题

    本案例中 username 记录成 userId了, nick 始终为空...,这是 getNick() 取得的就是 username..... 如果想自己取得自己系统的nickname则 做以下调整 ...

  5. Android 环信 调用相机崩掉 mikdir()

    protected void selectPicFromCamera() { if (!EaseCommonUtils.isSdcardExist()) { Toast.makeText(getAct ...

  6. 环信SDK集成

    利用环信SDK可以实现即时通讯,但在集成的过程中碰到了不少的坑. 注意 选择项目路径,这里以最新版环信demo为例 注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的And ...

  7. 李洪强iOS开发之-环信02.2_环信官网下载环信 SDK

    李洪强iOS开发之-环信02.2_环信官网下载环信 SDK 移动客服即时通讯云 iOS SDK 当前版本:V3.1.4 2016-07-08 [ 版本历史 ] | 开发指南 | 知识库 | Demo源 ...

  8. 李洪强iOS开发之-环信01_iOS SDK 前的准备工作

    李洪强iOS开发之-环信01_iOS SDK 前的准备工作 1.1_注册环信开发者账号并创建后台应用 详细步骤:  注册并创建应用 注册环信开发者账号 第 1 步:在环信官网上点击“即时通讯云”,并点 ...

  9. 环信easeui集成:坑总结2018

    环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改. 该篇文章将解决的问题: 1.如何将App用户体系的用户名和用户头像 显示于环信的easeui 2.如何 ...

随机推荐

  1. 一天弹出一次广告cookie

    function setCookie(name, value, expire) { window.document.cookie = name + "=" + escape(val ...

  2. AMAB interconnector PL301(二)

    1)Frequency Conversion Components:包含三种component. AXI-AXI async bridge:拥有两种mode:bypass mode 和 async m ...

  3. Android2.2快速入门 zz

    http://www.cnblogs.com/over140/archive/2010/09/27/1836567.html 前言 这是前段时间用于公司Android入门培训的资料,学习Android ...

  4. 安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试

    在安装Apache的过程中出现: 仔细查看提示: make_sock: could not bind to address 0.0.0.0:80 恍然大悟,计算机上安装了IIS7,80端口已占用. 打 ...

  5. OpenGL笔试题

    简述FrameBuffer,RenderBuffer,Depth Buffer,Framebuffer attachment,Stencil buffer的关系 简述利用OpenGL执行图像叠加(大P ...

  6. OpenStack 镜像制作

    Contents [hide] 1 Centos6.5 img制作 1.1 基础环境安装 1.2 下载或从本地上传系统镜像 1.3 启动服务 1.4 建立镜像文件 1.5 通过virt-install ...

  7. 统计SQL语句耗时百分比

    -- sql语句耗时百分比 declare @tmptb table(id int,name varchar(50),total_worker_time bigint,rate varchar(50) ...

  8. Datatables带参重绘

    研究了好久,最后发现只需要加上参数("bDestory":true,) 即可实现每次刷新就是新的重绘,而无需调用什么desctory init clear等等函数..

  9. M公司面试

    1.技术面 跟日历相关的,根据你联系人的时间,确定可以安排活动的时间 2.final面 你的项目经历,挑战,解决办法: 判断两个长方形,是否有重叠部分: 你的人生规划[这个很多公司都会问]

  10. 纯CSS实现nav导航栏+jQuery实现article区DIV切换

    效果图: main.html 代码: <!DOCTYPE html> <html> <head> <title>MyHomepage</title ...