环信_Android

环信_Android

1
回复

桌面应用图标显示未读消息 环信_Android

jiangym 回复了问题 • 2 人关注 • 39 次浏览 • 2017-01-16 18:03 • 来自相关话题

2
回复

android环信删除聊天记录,但是保留会话,怎么操作啊,急死了 环信_Android

zhuhy 回复了问题 • 2 人关注 • 93 次浏览 • 2017-01-16 16:51 • 来自相关话题

0
回复

Android视频通话空指针异常com.superrtc.sdk.VideoView.getScaleMode()' on a null object reference 环信_Android

回复

听风 发起了问题 • 1 人关注 • 71 次浏览 • 2017-01-16 16:14 • 来自相关话题

2
最佳

android 兔斯基表情是在哪里设置的?需求里不需要兔斯基,不知道在哪里删。急急急 环信_Android

DreamYONG 回复了问题 • 3 人关注 • 63 次浏览 • 2017-01-16 10:10 • 来自相关话题

1
回复

android端快速集成极光推送,导致easeui中.so文件找不到 环信_Android

Wxin 回复了问题 • 2 人关注 • 54 次浏览 • 2017-01-15 20:28 • 来自相关话题

1
回复

屏蔽了群消息 为什么可以收到 环信_Android

Wxin 回复了问题 • 2 人关注 • 64 次浏览 • 2017-01-15 20:27 • 来自相关话题

2
回复

求一段EMErrorCode的代码对应中文解释 错误码 EMErrorCode 环信_Android 环信_iOS

zhangyb 回复了问题 • 2 人关注 • 57 次浏览 • 2017-01-14 14:24 • 来自相关话题

1
回复

如何去掉EaseConversationList中的分割线 环信_Android

baoshu 回复了问题 • 2 人关注 • 79 次浏览 • 2017-01-13 17:44 • 来自相关话题

2
回复

请问android端 在app在后台运行时候,接收不到消息 环信_Android

baoshu 回复了问题 • 2 人关注 • 108 次浏览 • 2017-01-13 11:11 • 来自相关话题

3
最佳

环信安卓端集成音视频问题 环信_WebIM 环信_Android

baoshu 回复了问题 • 2 人关注 • 134 次浏览 • 2017-01-13 11:05 • 来自相关话题

2
回复

android集成easeUI3.0,收到通知后消息数量错误。 环信_Android

baoshu 回复了问题 • 3 人关注 • 89 次浏览 • 2017-01-13 11:02 • 来自相关话题

1
最佳

群消息@某人 环信_Android

baoshu 回复了问题 • 2 人关注 • 66 次浏览 • 2017-01-13 10:30 • 来自相关话题

2
回复

iOS和安卓都用的百度地图吗? 环信技术支持 环信_Android

江南孤鹜 回复了问题 • 3 人关注 • 797 次浏览 • 2017-01-12 17:21 • 来自相关话题

1
回复

android 群主踢人时出现Unknown server error怎么解决?昨天调试的时候还没有问题 环信_Android

jiangym 回复了问题 • 2 人关注 • 59 次浏览 • 2017-01-12 11:27 • 来自相关话题

1
回复

群消息@某人 环信_Android

jiangym 回复了问题 • 2 人关注 • 60 次浏览 • 2017-01-12 11:25 • 来自相关话题

1
回复

Android实时视频通话,相机和录音权限判断 Android 视频通话 权限判断 有专职工程师值守 环信_Android

Wxin 回复了问题 • 2 人关注 • 64 次浏览 • 2017-01-11 16:56 • 来自相关话题

2
回复

头像名字问题 环信_Android

DreamYONG 回复了问题 • 2 人关注 • 91 次浏览 • 2017-01-11 15:52 • 来自相关话题

1
回复
2
回复

键盘弹出会把actionbar顶上去怎么解决? 环信_Android

回复

gly651127 回复了问题 • 1 人关注 • 83 次浏览 • 2017-01-11 10:18 • 来自相关话题

2
回复

即时通讯云 Linux SDK 怎样获取mips的版本 环信_Android

Ben56 回复了问题 • 3 人关注 • 449 次浏览 • 2017-01-11 02:29 • 来自相关话题

2
回复

即时通讯云 如何获取mips下 linux 版本 环信_Android

Ben56 回复了问题 • 3 人关注 • 159 次浏览 • 2017-01-11 02:23 • 来自相关话题

1
回复

视频聊天 切换本人和聊天人的视图 环信_Android

zhuhy 回复了问题 • 2 人关注 • 78 次浏览 • 2017-01-11 00:16 • 来自相关话题

9
最佳

IOS与android不能实时视频 环信_Android 环信_iOS

zhuhy 回复了问题 • 3 人关注 • 160 次浏览 • 2017-01-10 18:53 • 来自相关话题

1
最佳

关于环信新建消息的一点疑问 环信_Android

zhoumin 回复了问题 • 2 人关注 • 71 次浏览 • 2017-01-09 19:10 • 来自相关话题

条新动态, 点击查看
zhangnan

zhangnan 回答了问题 • 2015-10-09 11:22 • 3 个回复 不感兴趣

环信支持临时聊天(非好友之间聊天)吗?

赞同来自:

支持的,环信默认通过对方id就可以通讯,不需要是好友关系
支持的,环信默认通过对方id就可以通讯,不需要是好友关系
不知道你们是个什么样的逻辑,会话列表其实就是根据用户ID或群ID生成的会话的集合,维护会话更表只要维护用户ID或群ID列表就可以了。如果你们把会话列表存在服务端,那么获取后,生成会话的集合展示在会话列表就可以了。
不知道你们是个什么样的逻辑,会话列表其实就是根据用户ID或群ID生成的会话的集合,维护会话更表只要维护用户ID或群ID列表就可以了。如果你们把会话列表存在服务端,那么获取后,生成会话的集合展示在会话列表就可以了。
IMForMe

IMForMe 回答了问题 • 2016-07-12 00:38 • 5 个回复 不感兴趣

环信用户注册报错208

赞同来自:

1、你用的是环信提供的appkey,是“授权模式”
2、测试阶段你的用户注册模式 不是“开放模式”
确保在授权模式下,后台有授权,不然就先用开放模式在前端注册
1、你用的是环信提供的appkey,是“授权模式”
2、测试阶段你的用户注册模式 不是“开放模式”
确保在授权模式下,后台有授权,不然就先用开放模式在前端注册
DemoHelper 这个类中的class MyGroupChangeListener implements EMGroupChangeListener 这个地方的代码
你看看对应的方法中的回调了,这个昵称可以在这个方法的回调中可以自己实现的。
DemoHelper 这个类中的class MyGroupChangeListener implements EMGroupChangeListener 这个地方的代码
你看看对应的方法中的回调了,这个昵称可以在这个方法的回调中可以自己实现的。
需要在监听到对方接通之后去显示视频界面
需要在监听到对方接通之后去显示视频界面
在加载会话fragment的activity里去注册消息监听,收到消息去刷新会话界面,参考下demo里mainactivity里的消息监听,里面有刷新会话界面的代码
在加载会话fragment的activity里去注册消息监听,收到消息去刷新会话界面,参考下demo里mainactivity里的消息监听,里面有刷新会话界面的代码
井底之蛙

井底之蛙 回答了问题 • 2016-12-11 22:41 • 3 个回复 不感兴趣

找不到类的问题...按照官方步骤走的

赞同来自:

找到问题所在了..是我疏忽了 最开始集成了2.x的 后面还3.x的 但是清单文件中的设置忘记改掉了
找到问题所在了..是我疏忽了 最开始集成了2.x的 后面还3.x的 但是清单文件中的设置忘记改掉了
lizg

lizg 回答了问题 • 2016-12-13 09:51 • 3 个回复 不感兴趣

android怎么重置密码?谢谢

赞同来自:

这个rest接口,是服务端调用的,客户端没有重置密码的接口
这个rest接口,是服务端调用的,客户端没有重置密码的接口
baoshu

baoshu 回答了问题 • 2016-12-13 10:52 • 3 个回复 不感兴趣

sdk2.2.3,在语音电话和视频电话的时候奔溃

赞同来自:

1.是直接依赖的easeui吗?自己的醒目中是否有v4包,easeui中是有使用的easeui的,如果自己的项目中也有使用的话,在您的build grild的android节点下配置
configurations {
all*.exclude g... 显示全部 »
1.是直接依赖的easeui吗?自己的醒目中是否有v4包,easeui中是有使用的easeui的,如果自己的项目中也有使用的话,在您的build grild的android节点下配置
configurations {
all*.exclude group: 'com.android.support', module: 'support-v4'
} 2.检查一下v4版本更换成一致的
 
3.项目中有用到v7都有的话也可能跟v4冲突也是build grild中添加如下配置
configurations {
all*.exclude group:'com.android.support', module:'support-v4'
all*.exclude group:'com.android.support', module:'support-annotations'
}
 
 
 
 
Wxin

Wxin 回答了问题 • 2016-12-13 21:23 • 2 个回复 不感兴趣

android 接入即时通讯sdk init 类型转换异常。

赞同来自:

在application里去调用easeui的初始化,第一个参数传application的上下文看看
在application里去调用easeui的初始化,第一个参数传application的上下文看看
一只熊猫

一只熊猫 回答了问题 • 2016-12-14 09:11 • 4 个回复 不感兴趣

android 集成,不使用语音和视频通话

赞同来自:

问题已经解决。
 
so文件的问题,我没有直接使用without.audio的so文件,是直接删除了av相关的两个so文件,现在直接替换了so文件。 问题解决。
问题已经解决。
 
so文件的问题,我没有直接使用without.audio的so文件,是直接删除了av相关的两个so文件,现在直接替换了so文件。 问题解决。
w1072654398

w1072654398 回答了问题 • 2016-12-17 15:33 • 1 个回复 不感兴趣

环信客服 在哪设置用户的头像和昵称?

赞同来自:

DemoHelper 里面有个叫getUserInfo()的方法 在这里进行设置
DemoHelper 里面有个叫getUserInfo()的方法 在这里进行设置
Wxin

Wxin 回答了问题 • 2016-12-19 15:59 • 1 个回复 不感兴趣

环信IM打包成release时 /lib/x86/libhyphenate_av.so失败

赞同来自:

混淆文档加上

-keep class com.hyphenate.** {*;}
-keep class com.superrtc.** {*;}
 
混淆文档加上

-keep class com.hyphenate.** {*;}
-keep class com.superrtc.** {*;}
 
Wxin

Wxin 回答了问题 • 2016-12-20 10:44 • 1 个回复 不感兴趣

android开发收到消息后不能即时刷新UI

赞同来自:

消息监听的回调是子线程,不能去toast
消息监听的回调是子线程,不能去toast
xmyrb

xmyrb 回答了问题 • 2016-12-20 17:11 • 1 个回复 不感兴趣

android 不继承easeui 如何播放语音

赞同来自:

很多语音聊天播放软件都具有在播放聊天语音时暂停外部正在播放的第三方播放器,语音信息播放结束再重新继续第三方播放器,正巧开发中需要这个功能,浏览一下网上资料,搜到的第一手资料是通过sendBroadcast的方法,具体的实现可以参看如下链接

http://st... 显示全部 »
很多语音聊天播放软件都具有在播放聊天语音时暂停外部正在播放的第三方播放器,语音信息播放结束再重新继续第三方播放器,正巧开发中需要这个功能,浏览一下网上资料,搜到的第一手资料是通过sendBroadcast的方法,具体的实现可以参看如下链接

http://stackoverflow.com/questions/14910360/how-to-play-or-resume-music-of-another-music-player-from-my-code
这个是第二通道中的http://docs.easemob.com/cs/300visitoraccess/2ndmessagechannel#访客端双通道功能
这个是第二通道中的http://docs.easemob.com/cs/300visitoraccess/2ndmessagechannel#访客端双通道功能
hg9527

hg9527 回答了问题 • 2016-12-31 12:01 • 1 个回复 不感兴趣

cocos2d-x接入 移动客服 求助...........

赞同来自:

经过调试发现注释了 ChatClient.getInstance().setDebugMode(true) 后终于可以收到消息了。虽然那几个找不到文件的错误提示还在。demo的解释是下图:
经过调试发现注释了 ChatClient.getInstance().setDebugMode(true) 后终于可以收到消息了。虽然那几个找不到文件的错误提示还在。demo的解释是下图:
接收实时视频实时语音的时候,判断下消息的接收方String to = intent.getStringExtra("to");是否是和当前登录的用户名一致,id一样的话再去调起接收界面
接收实时视频实时语音的时候,判断下消息的接收方String to = intent.getStringExtra("to");是否是和当前登录的用户名一致,id一样的话再去调起接收界面
接 楼上的话,, 
你需要在application 里面去setUserProfileProvider,同样,在 登录的地方,你 应该去吧自己的信息请求下来之后, 然后去保存到本地数据库;如果你有好友体系的话,那么需要一个接口请求到好友信息之后,把它存入本地... 显示全部 »
接 楼上的话,, 
你需要在application 里面去setUserProfileProvider,同样,在 登录的地方,你 应该去吧自己的信息请求下来之后, 然后去保存到本地数据库;如果你有好友体系的话,那么需要一个接口请求到好友信息之后,把它存入本地数据库,这就是后续的过程
那么,现在我从第一步给你讲下
6298
 这张 图片里面的代码就是在application 里面写的,在easeui 初始化之后去 调用 setuserinfo方法,然后就可以设置头像,正如你所说的,你已经知道从数据库去查询数据,然后设置进去;getuserinfo的方法里面 的参数是你当前的环信id, 所以,在存入数据库的时候,你需要去 使用环信ID 查询数据,也就相当于 这图片中的代码 UserApiModel userinfo = UserInfoCacheSvc.getByChatUserName(username);
 这段,然后的 判断是判断数据库 里面有没有这个人的信息,else 里面就是没有,没有的话就是 你所说的要去服务器去 请求,请求 下来之后,再设置进服务器
6299
 这就是服务器请求 成功之后的获取数据,然后设置进本地数据库,再去递归一下, 整个流程也就可以走通了,具体就是 这样的
baoshu

baoshu 回答了问题 • 2017-01-07 10:39 • 3 个回复 不感兴趣

环信安卓端集成音视频问题

赞同来自:

无法接通是否有相关报错日志,另外是否有提示,无法接通的场景可否描述一下呢?
无法接通是否有相关报错日志,另外是否有提示,无法接通的场景可否描述一下呢?
找到原因了:
下载的EasyUI的EaseChatFragment的
onMessageReceived()方法里少了一个
messageList.refreshSelectLast();
 
找到原因了:
下载的EasyUI的EaseChatFragment的
onMessageReceived()方法里少了一个
messageList.refreshSelectLast();
 
zhoumin

zhoumin 回答了问题 • 2017-01-09 19:10 • 1 个回复 不感兴趣

关于环信新建消息的一点疑问

赞同来自:

有消息状态的监听,您可以去官网文档看一下
http://docs.easemob.com/im/200androidclientintegration/50singlechat#监听消息状态
有消息状态的监听,您可以去官网文档看一下
http://docs.easemob.com/im/200androidclientintegration/50singlechat#监听消息状态
zhuhy

zhuhy 回答了问题 • 2017-01-10 15:05 • 9 个回复 不感兴趣

IOS与android不能实时视频

赞同来自:

android更新下jar和so,ios手动替换下sdk文件夹
android更新下jar和so,ios手动替换下sdk文件夹
baoshu

baoshu 回答了问题 • 2017-01-13 10:30 • 1 个回复 不感兴趣

群消息@某人

赞同来自:

http://docs.easemob.com/im/490integrationcases/50groupchatat#群组_功能    您可以看下官网的文档
群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 UI 上显示会有不同。可以通过环信... 显示全部 »
http://docs.easemob.com/im/490integrationcases/50groupchatat#群组_功能    您可以看下官网的文档
群组中,@某人的和群组普通消息没有区别,只是针对被@的用户在 UI 上显示会有不同。可以通过环信的扩展消息来实现。

发送方将想要@的人的环信 ID 通过扩展字段放到扩展消息中,并把消息发到群里。
群中成员在收到消息时,先检查扩展字段中是否有对应的字段,如果有,取出其中的环信 ID。
检查取出的环信 ID 与当前登录的环信 ID 是否一致。
如果检测一致,需要在 UI 上做特殊处理,显示出对应的提示信息,如“[有人@我]“,如不一致,不做处理。
DemoHelper 中
easeUI.setEmojiconInfoProvider注释掉
chatfragment中
((EaseEmojiconMenu)inputMenu.getEmojiconMenu()).addEmojiconGroup(Emoj... 显示全部 »
DemoHelper 中
easeUI.setEmojiconInfoProvider注释掉
chatfragment中
((EaseEmojiconMenu)inputMenu.getEmojiconMenu()).addEmojiconGroup(EmojiconExampleGroupData.getData();
注释掉
 
1
回复

桌面应用图标显示未读消息 环信_Android

回复

jiangym 回复了问题 • 2 人关注 • 39 次浏览 • 2017-01-16 18:03 • 来自相关话题

2
回复

android环信删除聊天记录,但是保留会话,怎么操作啊,急死了 环信_Android

回复

zhuhy 回复了问题 • 2 人关注 • 93 次浏览 • 2017-01-16 16:51 • 来自相关话题

0
回复

Android视频通话空指针异常com.superrtc.sdk.VideoView.getScaleMode()' on a null object reference 环信_Android

回复

听风 发起了问题 • 1 人关注 • 71 次浏览 • 2017-01-16 16:14 • 来自相关话题

2
最佳

android 兔斯基表情是在哪里设置的?需求里不需要兔斯基,不知道在哪里删。急急急 环信_Android

回复

DreamYONG 回复了问题 • 3 人关注 • 63 次浏览 • 2017-01-16 10:10 • 来自相关话题

1
回复

android端快速集成极光推送,导致easeui中.so文件找不到 环信_Android

回复

Wxin 回复了问题 • 2 人关注 • 54 次浏览 • 2017-01-15 20:28 • 来自相关话题

1
回复

屏蔽了群消息 为什么可以收到 环信_Android

回复

Wxin 回复了问题 • 2 人关注 • 64 次浏览 • 2017-01-15 20:27 • 来自相关话题

2
回复

求一段EMErrorCode的代码对应中文解释 错误码 EMErrorCode 环信_Android 环信_iOS

回复

zhangyb 回复了问题 • 2 人关注 • 57 次浏览 • 2017-01-14 14:24 • 来自相关话题

1
回复

如何去掉EaseConversationList中的分割线 环信_Android

回复

baoshu 回复了问题 • 2 人关注 • 79 次浏览 • 2017-01-13 17:44 • 来自相关话题

2
回复

请问android端 在app在后台运行时候,接收不到消息 环信_Android

回复

baoshu 回复了问题 • 2 人关注 • 108 次浏览 • 2017-01-13 11:11 • 来自相关话题

3
最佳

环信安卓端集成音视频问题 环信_WebIM 环信_Android

回复

baoshu 回复了问题 • 2 人关注 • 134 次浏览 • 2017-01-13 11:05 • 来自相关话题

2
回复

android集成easeUI3.0,收到通知后消息数量错误。 环信_Android

回复

baoshu 回复了问题 • 3 人关注 • 89 次浏览 • 2017-01-13 11:02 • 来自相关话题

1
最佳

群消息@某人 环信_Android

回复

baoshu 回复了问题 • 2 人关注 • 66 次浏览 • 2017-01-13 10:30 • 来自相关话题

2
回复

iOS和安卓都用的百度地图吗? 环信技术支持 环信_Android

回复

江南孤鹜 回复了问题 • 3 人关注 • 797 次浏览 • 2017-01-12 17:21 • 来自相关话题

1
回复

android 群主踢人时出现Unknown server error怎么解决?昨天调试的时候还没有问题 环信_Android

回复

jiangym 回复了问题 • 2 人关注 • 59 次浏览 • 2017-01-12 11:27 • 来自相关话题

1
回复

群消息@某人 环信_Android

回复

jiangym 回复了问题 • 2 人关注 • 60 次浏览 • 2017-01-12 11:25 • 来自相关话题

1
回复

Android实时视频通话,相机和录音权限判断 Android 视频通话 权限判断 有专职工程师值守 环信_Android

回复

Wxin 回复了问题 • 2 人关注 • 64 次浏览 • 2017-01-11 16:56 • 来自相关话题

2
回复

头像名字问题 环信_Android

回复

DreamYONG 回复了问题 • 2 人关注 • 91 次浏览 • 2017-01-11 15:52 • 来自相关话题

2
回复

键盘弹出会把actionbar顶上去怎么解决? 环信_Android

回复

gly651127 回复了问题 • 1 人关注 • 83 次浏览 • 2017-01-11 10:18 • 来自相关话题

2
回复

即时通讯云 Linux SDK 怎样获取mips的版本 环信_Android

回复

Ben56 回复了问题 • 3 人关注 • 449 次浏览 • 2017-01-11 02:29 • 来自相关话题

2
回复

即时通讯云 如何获取mips下 linux 版本 环信_Android

回复

Ben56 回复了问题 • 3 人关注 • 159 次浏览 • 2017-01-11 02:23 • 来自相关话题

1
回复

视频聊天 切换本人和聊天人的视图 环信_Android

回复

zhuhy 回复了问题 • 2 人关注 • 78 次浏览 • 2017-01-11 00:16 • 来自相关话题

9
最佳

IOS与android不能实时视频 环信_Android 环信_iOS

回复

zhuhy 回复了问题 • 3 人关注 • 160 次浏览 • 2017-01-10 18:53 • 来自相关话题

1
最佳

关于环信新建消息的一点疑问 环信_Android

回复

zhoumin 回复了问题 • 2 人关注 • 71 次浏览 • 2017-01-09 19:10 • 来自相关话题

0
评论

初步引入easeui遇到的问题 环信_Android

FredKang 发表了文章 • 193 次浏览 • 2016-11-07 10:18 • 来自相关话题

分享几个我引入EaseUI遇到的问题及解决方法
 
duplicate 项目中重复依赖了包
 搜索 BackStackState 选取一个依赖就行
 
.so文件报错找不到
 这个错误在app的build.gradle里面添加下面这句就好了。
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
 
Dex问题
 这个错误在app的build.gradle里面添加下面这句就好了。
android {
    defaultConfig {
        multiDexEnabled true

    }
}
Error:Configuration with name 'default' not found
 这个问题应该是gradle版本问题,进工作目录修改app的gradle信息 查看全部
分享几个我引入EaseUI遇到的问题及解决方法
 
  • duplicate 项目中重复依赖了包

 搜索 BackStackState 选取一个依赖就行
 
  • .so文件报错找不到

 这个错误在app的build.gradle里面添加下面这句就好了。
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
 
  • Dex问题

 这个错误在app的build.gradle里面添加下面这句就好了。
android {
    defaultConfig {
        multiDexEnabled true

    }
}
  • Error:Configuration with name 'default' not found

 这个问题应该是gradle版本问题,进工作目录修改app的gradle信息
1
评论

关于会话列表的置顶聊天 Android 环信_Android

陈日明 发表了文章 • 373 次浏览 • 2016-10-27 16:18 • 来自相关话题

最近搞完了置顶聊天,来写篇文章分享下经验。

其实刚刚开始 ,我自己在想,我是不是要去做出类似于QQ那种的滑动,然后显示置顶和删除。




我就开始写,写完了之后然后去置顶,取消置顶,其实是有用的,但是为什么我到最后还是没有选择这个效果呢?

因为这个最后是要到Adapter里面去设置这两个按钮,我本人并不喜欢这东西放到Adapter里面,接下来强迫症来了,直接把代码全部删除,换一种思路..........我想到了微信,点击弹出一个菜单,和dialog很很像的一个功能。

好,来跟着我一起走一下思路。

首先是,要实现置顶聊天,那么我们就要有两个List集合,一个是置顶的,一个是不是置顶的,然后置顶的是需要一个小小的数据库去保存置顶的对话人的UserName;这里,环信给出了EMConversation的一个方法,带大家看看技术文档。





这里框出来的就是我们要用的至关重要的方法,特别重要,




看下这个文档里面说的非常清楚,也就是扩展字段,设置一个扩展字段我们才知道这条Conversation的特别之处,然后去判断这个会话有没有设置扩展消息,有的话,那就排到置顶的那个集合里面去。

接下来我们要准备的是数据库




也就是这两个东西,准备就绪,蓝后 ..... 要开始大动,也就是把关于会话列表里面的东西全部放到项目里面来。




所要动的就是这3个类,全部移动到项目中,因为数据库要在Adapter和ListView里面操作,这一步很简单,动动手就行。

那么这些全部做完之后,我们开始写代码了,仿照通讯录的数据库来




这里就是getset,然后在DemoHelper里面




蓝后,再Application里面去给它暴露出两个方法。




好了,数据库的东西是配置完成了,那么,问题就来了,怎么去启动数据库?




这样就添加了数据库,注意,这里添加了数据库之后,然后再去真正的写置顶的代码了。。。。

首先我们先看看会话列表界面




在setupView方法中,别忘了获取数据库里面的置顶会话。




这里直接贴出来了ConversationListFragment,这里就是把EaseUI里面的EaseConversationlistFragment里面的内容,然后BaseFragment也就是EaseBaseFragment里面的内容了。




主要加载会话的方法就是这个方法,主要代码就是synchronized里面的内容,这里很容易就能够理解For循环里面的内容,然后我们要在这里面判断,有没有会话是包含扩展字段的,有的话就将包含扩展字段的会话放入top_list这个集合里面;蓝后你们可以看到topList,这个List就是图10里面的topList,topMap也是图10里面的。蓝后,我们可以看到排序方法,也就是会话列表的排序方法(sortConversationByLastChatTime),这里我自己写了一个排序方法,并没有用到Pair。





其实这两个方法是一样的,一样的效果。

那么接下来,就是看看ConversationList





最主要的就是这个init方法,也没什么说的。。那么接下来就到ConversationAdapter




这里就和EaseUI里面的那个EaseConversationAdapter有点不一样了,EaseConversationAdapter里面是继承ArrayAdapter的,这里是继承BaseAdapter,在这里使用BaseAdapter为了方便大家能够理解。

我们只需要在getItem和getCount里面做点手脚就可以了




好了,到这里就完成了整个置顶会话的显示,那么接下来,我们就要写一下置顶功能了,这里很有必要说明下,个人意见,在写会话列表的时候,推荐使用一个Fragment去继承EaseConversationListFragment。继承之后我们就可以重写setUpView方法,在这方法里面我们进行一系列的操作。




这里就是用到的长按事件,然后显示一个Dialog,在Dialog里面去实现置顶功能的操作。这里由于代码过长,所以截两张图。。。。




图18主要就是Dialog的显示




在这里就是删除会话等这个按钮的点击事件。




在里就是置顶的点击事件了。。

好了 到这里已经完成了置顶的全部代码展示了。个人感觉还是很详细的,如果还是不懂,那就环信互帮互助-非官方 340452063来这,给你解答你的问题 查看全部
最近搞完了置顶聊天,来写篇文章分享下经验。

其实刚刚开始 ,我自己在想,我是不是要去做出类似于QQ那种的滑动,然后显示置顶和删除。
1.png

我就开始写,写完了之后然后去置顶,取消置顶,其实是有用的,但是为什么我到最后还是没有选择这个效果呢?

因为这个最后是要到Adapter里面去设置这两个按钮,我本人并不喜欢这东西放到Adapter里面,接下来强迫症来了,直接把代码全部删除,换一种思路..........我想到了微信,点击弹出一个菜单,和dialog很很像的一个功能。

好,来跟着我一起走一下思路。

首先是,要实现置顶聊天,那么我们就要有两个List集合,一个是置顶的,一个是不是置顶的,然后置顶的是需要一个小小的数据库去保存置顶的对话人的UserName;这里,环信给出了EMConversation的一个方法,带大家看看技术文档。

2.png

这里框出来的就是我们要用的至关重要的方法,特别重要,
3.png

看下这个文档里面说的非常清楚,也就是扩展字段,设置一个扩展字段我们才知道这条Conversation的特别之处,然后去判断这个会话有没有设置扩展消息,有的话,那就排到置顶的那个集合里面去。

接下来我们要准备的是数据库
4.png

也就是这两个东西,准备就绪,蓝后 ..... 要开始大动,也就是把关于会话列表里面的东西全部放到项目里面来。
5.png

所要动的就是这3个类,全部移动到项目中,因为数据库要在Adapter和ListView里面操作,这一步很简单,动动手就行。

那么这些全部做完之后,我们开始写代码了,仿照通讯录的数据库来
6.png

这里就是getset,然后在DemoHelper里面
7.png

蓝后,再Application里面去给它暴露出两个方法。
8.png

好了,数据库的东西是配置完成了,那么,问题就来了,怎么去启动数据库?
9.png

这样就添加了数据库,注意,这里添加了数据库之后,然后再去真正的写置顶的代码了。。。。

首先我们先看看会话列表界面
10.png

在setupView方法中,别忘了获取数据库里面的置顶会话。
11.png

这里直接贴出来了ConversationListFragment,这里就是把EaseUI里面的EaseConversationlistFragment里面的内容,然后BaseFragment也就是EaseBaseFragment里面的内容了。
12.png

主要加载会话的方法就是这个方法,主要代码就是synchronized里面的内容,这里很容易就能够理解For循环里面的内容,然后我们要在这里面判断,有没有会话是包含扩展字段的,有的话就将包含扩展字段的会话放入top_list这个集合里面;蓝后你们可以看到topList,这个List就是图10里面的topList,topMap也是图10里面的。蓝后,我们可以看到排序方法,也就是会话列表的排序方法(sortConversationByLastChatTime),这里我自己写了一个排序方法,并没有用到Pair。

13.png

其实这两个方法是一样的,一样的效果。

那么接下来,就是看看ConversationList

14.png

最主要的就是这个init方法,也没什么说的。。那么接下来就到ConversationAdapter
15.png

这里就和EaseUI里面的那个EaseConversationAdapter有点不一样了,EaseConversationAdapter里面是继承ArrayAdapter的,这里是继承BaseAdapter,在这里使用BaseAdapter为了方便大家能够理解。

我们只需要在getItem和getCount里面做点手脚就可以了
16.png

好了,到这里就完成了整个置顶会话的显示,那么接下来,我们就要写一下置顶功能了,这里很有必要说明下,个人意见,在写会话列表的时候,推荐使用一个Fragment去继承EaseConversationListFragment。继承之后我们就可以重写setUpView方法,在这方法里面我们进行一系列的操作。
17.png

这里就是用到的长按事件,然后显示一个Dialog,在Dialog里面去实现置顶功能的操作。这里由于代码过长,所以截两张图。。。。
18.png

图18主要就是Dialog的显示
19.png

在这里就是删除会话等这个按钮的点击事件。
20.png

在里就是置顶的点击事件了。。

好了 到这里已经完成了置顶的全部代码展示了。个人感觉还是很详细的,如果还是不懂,那就环信互帮互助-非官方 340452063来这,给你解答你的问题
13
评论

【环信集成笔记】进阶篇-android环信昵称头像解决方法 头像和昵称 环信集成 环信_Android

陈日明 发表了文章 • 2055 次浏览 • 2016-09-27 18:43 • 来自相关话题

当你刚刚集成环信的时候,在和自己android组的小伙伴玩的不亦乐乎的时候,当你过完这把瘾的时候,那么接下来,你就要考虑的是怎么让这个头像显示的是自己想要的头像,怎么让昵称显示自己的昵称.....

那么接下来,我来告诉大家,怎么解决昵称头像的问题,

首先,这篇文章是接在我大表哥江南孤鹜在im社区写的一篇文章之后写的,上个链接地址 Android获取昵称头像接下来,我对此文章做些补充:

我看到有些人在问,这个方法放在哪里?





好吧,大表哥没说出来,这个放在UserApiModel里面

那么接下来,大表哥写的是这样的,利用扩展消息去获取头像昵称,在这里我提醒下大家,要判断这个头像是自己的还是好友的




怎么判断呢,作为新手的我们,我推荐使用shareprefences在登陆的时候保存下自己的头像昵称,然后再这里获取,并且设置给扩展





在demohelper里面有个getuserinfo方法




这里就是把获取到的头像昵称设置给环信,然后显示出来,这里最重要,切记不要写错。

那么,到此为止,其实都说完了,可是,毕竟是一个延伸,怎么可能就此结束,接下来给大家看下,请求数据,然后设置给数据库





请求的过程我就不写了,这个大家都会,获取到username,id,logo,之后先要把头像,昵称存到userdao里面,如果userdao是环信的一个数据库,这个大家自己看看demo的代码就知道了,设置到这里,是为了在联系人列表里面显示,UserInfoCacheSvc.createOrUpdate(id,username,logo_img);这句就是把头像昵称放到大表哥写的数据库里面

最后,补充一下,忘记说了,导入框架




好了,这样就结束了,如果有什么还不明白,就加入大表哥粉丝群(环信IM互帮互助群 340452063),我会帮你解答一切问题 查看全部
当你刚刚集成环信的时候,在和自己android组的小伙伴玩的不亦乐乎的时候,当你过完这把瘾的时候,那么接下来,你就要考虑的是怎么让这个头像显示的是自己想要的头像,怎么让昵称显示自己的昵称.....

那么接下来,我来告诉大家,怎么解决昵称头像的问题,

首先,这篇文章是接在我大表哥江南孤鹜在im社区写的一篇文章之后写的,上个链接地址 Android获取昵称头像接下来,我对此文章做些补充:

我看到有些人在问,这个方法放在哪里?

1.png

好吧,大表哥没说出来,这个放在UserApiModel里面

那么接下来,大表哥写的是这样的,利用扩展消息去获取头像昵称,在这里我提醒下大家,要判断这个头像是自己的还是好友的
2.png

怎么判断呢,作为新手的我们,我推荐使用shareprefences在登陆的时候保存下自己的头像昵称,然后再这里获取,并且设置给扩展

3.png

在demohelper里面有个getuserinfo方法
4.png

这里就是把获取到的头像昵称设置给环信,然后显示出来,这里最重要,切记不要写错。

那么,到此为止,其实都说完了,可是,毕竟是一个延伸,怎么可能就此结束,接下来给大家看下,请求数据,然后设置给数据库

5.png

请求的过程我就不写了,这个大家都会,获取到username,id,logo,之后先要把头像,昵称存到userdao里面,如果userdao是环信的一个数据库,这个大家自己看看demo的代码就知道了,设置到这里,是为了在联系人列表里面显示,UserInfoCacheSvc.createOrUpdate(id,username,logo_img);这句就是把头像昵称放到大表哥写的数据库里面

最后,补充一下,忘记说了,导入框架
6.png

好了,这样就结束了,如果有什么还不明白,就加入大表哥粉丝群(环信IM互帮互助群 340452063),我会帮你解答一切问题
3
评论

【环信集成笔记】进阶篇-关于环信EaseUI集成冲突问题以及解决办法 Android 环信集成笔记 环信_Android

陈日明 发表了文章 • 1267 次浏览 • 2016-09-08 17:48 • 来自相关话题

是不是在集成EaseUI的时候看到这个问题顿时就像砸了电脑。或者说你在百度之后,发现很多人出现这个问题,然后按照他们的思路去改来改去,改到最后还是没有成功;然后不知所措的移动着鼠标,一次又一次的运行,等着奇迹的出现?

或者又说 ,你在试了他们的方法之后然后Clean,rebuild,重启AndroidStudio之后,还是没用,还是这个错。

下面我就跟大家讲一下,怎么去解决这个错误

首先这个错误的原因是因为V4的包冲突,也就是说,如果你的主项目里面也有V4的包,EaseUI里面也有V4的包,那么久删除主项目里面的V4的包,这个是不会报错的,尽管删除,删除之后,再次运行项目,试试看,如果还是报这个错的话,那就把EaseUi里面的V4的包删除,然后





必须选择到EaseUI,然后选到Dependencies,再点击加号里面的Library dependency,进去之后





选择V4包OK就可以了,添加之后,再次运行项目,如果还是不行的话,别着急,继续往下看




在app的配置文件里面的Android节点下加入图中的代码

dexOptions {
javaMaxHeapSize"4g"
}
aaptOptions.cruncherEnabled=false
aaptOptions.useNewCruncher=false


不管有没有用,你加入进去,然后再次运行项目,如果在不行的话,我想说你的运气真的好差。
 
 
在这里,很感谢某一个程序员的分享,这里还提供一个解决办法,就是删除easeui里面的谷歌服务的jar包,然后rebuild项目


运气差那就Clean,rebuild项目,或者更换EaseUI
 

 

如果还有问题的话 请加入 环信互帮互助-非官方 340452063  查看全部
1677578-57c07efa4e1ded40.png

是不是在集成EaseUI的时候看到这个问题顿时就像砸了电脑。或者说你在百度之后,发现很多人出现这个问题,然后按照他们的思路去改来改去,改到最后还是没有成功;然后不知所措的移动着鼠标,一次又一次的运行,等着奇迹的出现?

或者又说 ,你在试了他们的方法之后然后Clean,rebuild,重启AndroidStudio之后,还是没用,还是这个错。

下面我就跟大家讲一下,怎么去解决这个错误

首先这个错误的原因是因为V4的包冲突,也就是说,如果你的主项目里面也有V4的包,EaseUI里面也有V4的包,那么久删除主项目里面的V4的包,这个是不会报错的,尽管删除,删除之后,再次运行项目,试试看,如果还是报这个错的话,那就把EaseUi里面的V4的包删除,然后

1677578-48790976631f9919.png

必须选择到EaseUI,然后选到Dependencies,再点击加号里面的Library dependency,进去之后

1677578-e32191fbb5c8407c.png

选择V4包OK就可以了,添加之后,再次运行项目,如果还是不行的话,别着急,继续往下看
1677578-b8bc8862272e6530.png

在app的配置文件里面的Android节点下加入图中的代码

dexOptions {
javaMaxHeapSize"4g"
}
aaptOptions.cruncherEnabled=false
aaptOptions.useNewCruncher=false


不管有没有用,你加入进去,然后再次运行项目,如果在不行的话,我想说你的运气真的好差。
 
 
在这里,很感谢某一个程序员的分享,这里还提供一个解决办法,就是删除easeui里面的谷歌服务的jar包,然后rebuild项目


运气差那就Clean,rebuild项目,或者更换EaseUI
 

 

如果还有问题的话 请加入 环信互帮互助-非官方 340452063 
3
评论

使用Android Studio导入3.x环信demo 环信_Android

zhuhy 发表了文章 • 1655 次浏览 • 2016-07-10 10:55 • 来自相关话题

下载官网最新sdk,http://www.anlook.com/download/im
下载后,解压后在examples中有源码,导入chatdemoui3.0
首先




然后找到examples下的chatdemoui3.0目录下的bulid.gradle点击ok导入




导入之后,在setting.bulid中将后两行注掉





重新编译一下,然后会提示open file,打开后,在easeui的bulid.gradle中将这里注掉 查看全部
下载官网最新sdk,http://www.anlook.com/download/im
下载后,解压后在examples中有源码,导入chatdemoui3.0
首先
图1.png

然后找到examples下的chatdemoui3.0目录下的bulid.gradle点击ok导入
图2.png

导入之后,在setting.bulid中将后两行注掉

图3.png

重新编译一下,然后会提示open file,打开后,在easeui的bulid.gradle中将这里注掉
图4.png
3
评论

关于环信im用户ID大小写问题 bug 环信_Android

GXJ 发表了文章 • 961 次浏览 • 2016-04-21 00:14 • 来自相关话题

情况是如果某个用户的名字是包含大写的,如 51170219870626850X,但是在另一个用户的 EMMessageListener 中的 onMessageReceived 中接收到的 username 是 51170219870626850x,在源码中的比较方法是 equals(String) 这时就会判断失误,判断结果是false,修正办法是将 equals 换成 equalsIgnoreCase 即可,下面附上图 查看全部
情况是如果某个用户的名字是包含大写的,如 51170219870626850X,但是在另一个用户的 EMMessageListener 中的 onMessageReceived 中接收到的 username 是 51170219870626850x,在源码中的比较方法是 equals(String) 这时就会判断失误,判断结果是false,修正办法是将 equals 换成 equalsIgnoreCase 即可,下面附上图
1
评论

环信关于昵称和图片的问题。android 环信_Android

xujianxiang 发表了文章 • 1065 次浏览 • 2016-02-25 14:59 • 来自相关话题

环信关于昵称和图片的问题。当你去跟技术交流的时候,他们一般会给你这样一个网页,http://www.imgeek.org/article/825307638。让你自忆去看,其它他说的已经很明白了,对于大神来进。但是对于菜鸟的我还是云里雾里,于是脑补各种知识。看大神留下的工程。查看我反正说的就是要写一个getUser的具体实现。我就试试看的心里乱写一气,最后成功了。我是修改了easeui中的代码
MainActivity.java,代码如下:

package com.easemob.easeuisimpledemo.ui; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import android.R.integer; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.easemob.chat.EMConversation; import com.easemob.easeui.EaseConstant; import com.easemob.easeui.controller.EaseUI; import com.easemob.easeui.domain.EaseUser; import com.easemob.easeui.ui.EaseBaseActivity; import com.easemob.easeui.ui.EaseContactListFragment; import com.easemob.easeui.ui.EaseContactListFragment.EaseContactListItemClickListener; import com.easemob.easeui.ui.EaseConversationListFragment; import com.easemob.easeui.ui.EaseConversationListFragment.EaseConversationListItemClickListener; import com.easemob.easeui.utils.EaseCommonUtils; import com.easemob.easeuisimpledemo.R; public class MainActivity extends EaseBaseActivity{ private TextView unreadLabel; private Button[] mTabs; private EaseConversationListFragment conversationListFragment; private EaseContactListFragment contactListFragment; private SettingsFragment settingFragment; private Fragment[] fragments; private int index; private int currentTabIndex; Map<String, EaseUser> contactsMap = new HashMap<String, EaseUser>(); @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_main); unreadLabel = (TextView) findViewById(R.id.unread_msg_number); mTabs = new Button[3]; mTabs[0] = (Button) findViewById(R.id.btn_conversation); mTabs[1] = (Button) findViewById(R.id.btn_address_list); mTabs[2] = (Button) findViewById(R.id.btn_setting); // 把第一个tab设为选中状态 mTabs[0].setSelected(true); conversationListFragment = new EaseConversationListFragment(); contactListFragment = new EaseContactListFragment(); settingFragment = new SettingsFragment(); contactListFragment.setContactsMap(getContacts()); contactsMap=getContacts(); conversationListFragment.setConversationListItemClickListener(new EaseConversationListItemClickListener() { @Override public void onListItemClicked(EMConversation conversation) { startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.getUserName())); } }); contactListFragment.setContactListItemClickListener(new EaseContactListItemClickListener() { @Override public void onListItemClicked(EaseUser user) { startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, user.getUsername())); } }); fragments = new Fragment[] { conversationListFragment, contactListFragment, settingFragment }; // 添加显示第一个fragment getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, conversationListFragment) .add(R.id.fragment_container, contactListFragment).hide(contactListFragment).show(conversationListFragment) .commit(); EaseUI easeUI = EaseUI.getInstance(); //需要easeui库显示用户头像和昵称设置此provider easeUI.setUserProfileProvider(new EaseUI.EaseUserProfileProvider() { @Override public EaseUser getUser(String username) { if (contactsMap == null) { return null; } Iterator<Map.Entry<String, EaseUser>> iterator = contactsMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, EaseUser> entry = iterator.next(); //兼容以前的通讯录里的已有的数据显示,加上此判断,如果是新集成的可以去掉此判断 if (!entry.getKey().equals("item_new_friends") && !entry.getKey().equals("item_groups") && !entry.getKey().equals("item_chatroom") && !entry.getKey().equals("item_robots")) { if (entry.getKey().equals(username)) { //不显示黑名单中的用户 return entry.getValue(); } } } return null; } }); } /** * button点击事件 * * @param view */ public void onTabClicked(View view) { switch (view.getId()) { case R.id.btn_conversation: index = 0; break; case R.id.btn_address_list: index = 1; break; case R.id.btn_setting: index = 2; break; } if (currentTabIndex != index) { FragmentTransaction trx = getSupportFragmentManager().beginTransaction(); trx.hide(fragments[currentTabIndex]); if (!fragments[index].isAdded()) { trx.add(R.id.fragment_container, fragments[index]); } trx.show(fragments[index]).commit(); } mTabs[currentTabIndex].setSelected(false); // 把当前tab设为选中状态 mTabs[index].setSelected(true); currentTabIndex = index; } /** * 临时生成的数据,密码皆为123456,可以登录测试接发消息 * @return */ private Map<String, EaseUser> getContacts(){ Map<String, EaseUser> contacts = new HashMap<String, EaseUser>(); for(int i = 1; i <= 10; i++){ EaseUser user = new EaseUser("easeuitest" + i); contacts.put("easeuitest" + i, user); } EaseUser user = new EaseUser("xu"); user.setNick("xujianxiang"); user.setAvatar("http://happysports.jianxingquyundong.com/image/5,112347a89bf2"); contacts.put("xu", user); user = new EaseUser("shen"); user.setNick("shenxiaojuan"); user.setAvatar("http://happysports.jianxingquyundong.com/image/5,112347a89bf2"); contacts.put("shen", user); return contacts; } }
仅献给跟我一样的菜鸟,看了应该会懂, 查看全部
环信关于昵称和图片的问题。当你去跟技术交流的时候,他们一般会给你这样一个网页,http://www.imgeek.org/article/825307638。让你自忆去看,其它他说的已经很明白了,对于大神来进。但是对于菜鸟的我还是云里雾里,于是脑补各种知识。看大神留下的工程。查看我反正说的就是要写一个getUser的具体实现。我就试试看的心里乱写一气,最后成功了。我是修改了easeui中的代码
MainActivity.java,代码如下:

package com.easemob.easeuisimpledemo.ui; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import android.R.integer; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.easemob.chat.EMConversation; import com.easemob.easeui.EaseConstant; import com.easemob.easeui.controller.EaseUI; import com.easemob.easeui.domain.EaseUser; import com.easemob.easeui.ui.EaseBaseActivity; import com.easemob.easeui.ui.EaseContactListFragment; import com.easemob.easeui.ui.EaseContactListFragment.EaseContactListItemClickListener; import com.easemob.easeui.ui.EaseConversationListFragment; import com.easemob.easeui.ui.EaseConversationListFragment.EaseConversationListItemClickListener; import com.easemob.easeui.utils.EaseCommonUtils; import com.easemob.easeuisimpledemo.R; public class MainActivity extends EaseBaseActivity{ private TextView unreadLabel; private Button[] mTabs; private EaseConversationListFragment conversationListFragment; private EaseContactListFragment contactListFragment; private SettingsFragment settingFragment; private Fragment[] fragments; private int index; private int currentTabIndex; Map<String, EaseUser> contactsMap = new HashMap<String, EaseUser>(); @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_main); unreadLabel = (TextView) findViewById(R.id.unread_msg_number); mTabs = new Button[3]; mTabs[0] = (Button) findViewById(R.id.btn_conversation); mTabs[1] = (Button) findViewById(R.id.btn_address_list); mTabs[2] = (Button) findViewById(R.id.btn_setting); // 把第一个tab设为选中状态 mTabs[0].setSelected(true); conversationListFragment = new EaseConversationListFragment(); contactListFragment = new EaseContactListFragment(); settingFragment = new SettingsFragment(); contactListFragment.setContactsMap(getContacts()); contactsMap=getContacts(); conversationListFragment.setConversationListItemClickListener(new EaseConversationListItemClickListener() { @Override public void onListItemClicked(EMConversation conversation) { startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.getUserName())); } }); contactListFragment.setContactListItemClickListener(new EaseContactListItemClickListener() { @Override public void onListItemClicked(EaseUser user) { startActivity(new Intent(MainActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, user.getUsername())); } }); fragments = new Fragment[] { conversationListFragment, contactListFragment, settingFragment }; // 添加显示第一个fragment getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, conversationListFragment) .add(R.id.fragment_container, contactListFragment).hide(contactListFragment).show(conversationListFragment) .commit(); EaseUI easeUI = EaseUI.getInstance(); //需要easeui库显示用户头像和昵称设置此provider easeUI.setUserProfileProvider(new EaseUI.EaseUserProfileProvider() { @Override public EaseUser getUser(String username) { if (contactsMap == null) { return null; } Iterator<Map.Entry<String, EaseUser>> iterator = contactsMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, EaseUser> entry = iterator.next(); //兼容以前的通讯录里的已有的数据显示,加上此判断,如果是新集成的可以去掉此判断 if (!entry.getKey().equals("item_new_friends") && !entry.getKey().equals("item_groups") && !entry.getKey().equals("item_chatroom") && !entry.getKey().equals("item_robots")) { if (entry.getKey().equals(username)) { //不显示黑名单中的用户 return entry.getValue(); } } } return null; } }); } /** * button点击事件 * * @param view */ public void onTabClicked(View view) { switch (view.getId()) { case R.id.btn_conversation: index = 0; break; case R.id.btn_address_list: index = 1; break; case R.id.btn_setting: index = 2; break; } if (currentTabIndex != index) { FragmentTransaction trx = getSupportFragmentManager().beginTransaction(); trx.hide(fragments[currentTabIndex]); if (!fragments[index].isAdded()) { trx.add(R.id.fragment_container, fragments[index]); } trx.show(fragments[index]).commit(); } mTabs[currentTabIndex].setSelected(false); // 把当前tab设为选中状态 mTabs[index].setSelected(true); currentTabIndex = index; } /** * 临时生成的数据,密码皆为123456,可以登录测试接发消息 * @return */ private Map<String, EaseUser> getContacts(){ Map<String, EaseUser> contacts = new HashMap<String, EaseUser>(); for(int i = 1; i <= 10; i++){ EaseUser user = new EaseUser("easeuitest" + i); contacts.put("easeuitest" + i, user); } EaseUser user = new EaseUser("xu"); user.setNick("xujianxiang"); user.setAvatar("http://happysports.jianxingquyundong.com/image/5,112347a89bf2"); contacts.put("xu", user); user = new EaseUser("shen"); user.setNick("shenxiaojuan"); user.setAvatar("http://happysports.jianxingquyundong.com/image/5,112347a89bf2"); contacts.put("shen", user); return contacts; } }
仅献给跟我一样的菜鸟,看了应该会懂,
14
评论

Android EaseUI 关于设置昵称、头像 环信_Android

Wxin 发表了文章 • 9398 次浏览 • 2016-02-18 19:43 • 来自相关话题

关于依赖easeui,设置头像、昵称问题
在调用EaseUI.getInstance().init初始化之后去设置用户信息提供者
//get easeui instance
EaseUI easeUI = EaseUI.getInstance();
//需要easeui库显示用户头像和昵称设置此provider
easeUI.setUserProfileProvider(new EaseUserProfileProvider() {
 
    @Override
    public EaseUser getUser(String username) {
       return getUserInfo(username);
    }
});

getUserInfo是自己实现的一个方法,在这个方法里去根据传入的username获取本地保存的对应的昵称、头像,设置给EaseUser的对象,并返回。

easeui里显示昵称、头像的时候会去调用EaseUserProfileProvider这个接口去获取EaseUser对象,会去执行在初始化之后设置的getUserInfo方法,如果没有显示昵称、头像,你就要去看getUserInfo里是否拿到昵称、头像设置给EaseUser对象了。

获取昵称、头像显示,我这里给大家两种方案,昵称、头像都保存在自己的服务器。

第一种
可以在登录之后去服务器获取所有好友的昵称、头像,包括自己的,保存在本地,getUserInfo方法里就去根据传入的username去本地获取,设置给EaseUser对象返回。

第二种
可以在getUserInfo方法里去判断本地是否有保存对应的昵称和头像,没有就发送网络请求去服务器获取对应的昵称头像保存到本地,设置给EaseUser对象返回 ,然后发送广播到聊天界面去提示刷新,刷新之后就会执行getUserInfo方法拿到本地的昵称、头像。

头像、昵称更新
用户请求你的服务器修改了昵称、头像,你的服务器去调用rest给这个用户的所有好友,发条透传消息,提示去更新本地保存的昵称、头像 查看全部
关于依赖easeui,设置头像、昵称问题
在调用EaseUI.getInstance().init初始化之后去设置用户信息提供者
//get easeui instance
EaseUI easeUI = EaseUI.getInstance();
//需要easeui库显示用户头像和昵称设置此provider
easeUI.setUserProfileProvider(new EaseUserProfileProvider() {
 
    @Override
    public EaseUser getUser(String username) {
       return getUserInfo(username);
    }
});

getUserInfo是自己实现的一个方法,在这个方法里去根据传入的username获取本地保存的对应的昵称、头像,设置给EaseUser的对象,并返回。

easeui里显示昵称、头像的时候会去调用EaseUserProfileProvider这个接口去获取EaseUser对象,会去执行在初始化之后设置的getUserInfo方法,如果没有显示昵称、头像,你就要去看getUserInfo里是否拿到昵称、头像设置给EaseUser对象了。

获取昵称、头像显示,我这里给大家两种方案,昵称、头像都保存在自己的服务器。

第一种
可以在登录之后去服务器获取所有好友的昵称、头像,包括自己的,保存在本地,getUserInfo方法里就去根据传入的username去本地获取,设置给EaseUser对象返回。

第二种
可以在getUserInfo方法里去判断本地是否有保存对应的昵称和头像,没有就发送网络请求去服务器获取对应的昵称头像保存到本地,设置给EaseUser对象返回 ,然后发送广播到聊天界面去提示刷新,刷新之后就会执行getUserInfo方法拿到本地的昵称、头像。

头像、昵称更新
用户请求你的服务器修改了昵称、头像,你的服务器去调用rest给这个用户的所有好友,发条透传消息,提示去更新本地保存的昵称、头像
3
评论

Android接收不到消息(普通消息,透传消息、离线消息)? 环信_Android

zhuhy 发表了文章 • 2941 次浏览 • 2016-02-16 20:33 • 来自相关话题

普通消息收不到

    发送消息的EMCallBack的onSuccess方法被回调成功。我用后台查询所有聊天记录也能查到我客户端发送的消息,但是客户端却无法接收到发送的消息。------看下有注册接收消息的监听吗,你在onResume方法中加上注册接收消息的监听,EMChatManager.getInstance().registerEventListener(this,
                new EMNotifierEvent.Event { EMNotifierEvent.Event.EventNewMessage ,
                EMNotifierEvent.Event.EventOfflineMessage,
                EMNotifierEvent.Event.EventConversationListChanged});
如果我用环信后台发送测试消息,客户端却能正常接收-------看下发送消息是否单聊消息,将这句注释掉
//如果是群聊,设置chattype,默认是单聊 message.setChatType(ChatType.GroupChat);
发送消息有扩展消息的话,发送成功,接收不到的话,看下你发送的类型和接收类型对吗。发送的是整型的话,接收就是有整型接收,接收类型要一致。

透传消息收不到

    接收不到透传消息,首先看下消息是否发送成功,消息发送成功的话,接收不到透传消息,检查看下在注册完接收消息的监听后又加上这句吗
注:最后要通知sdk,UI 已经初始化完毕,注册了相应的receiver和listener, 可以接受broadcast了 EMChat.getInstance().setAppInited(); 离线透传消息也是走的普通透传消息的监听。

离线消息接收不到

    看下有注册离线消息监听吗EventOfflineMessage,退出程序的话或者进程不在的话,消息就接收不到了,android的离线消息保存在服务端,用户上线之后接收到。

    对于离线消息,CMD和普通的消息处理方式不太一样,CMD会被一条一条推送过来,而普通消息会在3秒左右推送一次,event data 是离线消息数组

    使用广播接收消息的话,在注册完广播监听之后,一定要加上这句 EMChat.getInstance().setAppInited();切换页面接收不到的话,看下设置的广播优先级,使用广播接收消息的话,普通消息和离线消息走的是同一个广播NewMessageBroadcastReceiver()。 查看全部
普通消息收不到

    发送消息的EMCallBack的onSuccess方法被回调成功。我用后台查询所有聊天记录也能查到我客户端发送的消息,但是客户端却无法接收到发送的消息。------看下有注册接收消息的监听吗,你在onResume方法中加上注册接收消息的监听,EMChatManager.getInstance().registerEventListener(this,
                new EMNotifierEvent.Event { EMNotifierEvent.Event.EventNewMessage ,
                EMNotifierEvent.Event.EventOfflineMessage,
                EMNotifierEvent.Event.EventConversationListChanged});
如果我用环信后台发送测试消息,客户端却能正常接收-------看下发送消息是否单聊消息,将这句注释掉
//如果是群聊,设置chattype,默认是单聊 message.setChatType(ChatType.GroupChat);
发送消息有扩展消息的话,发送成功,接收不到的话,看下你发送的类型和接收类型对吗。发送的是整型的话,接收就是有整型接收,接收类型要一致。

透传消息收不到

    接收不到透传消息,首先看下消息是否发送成功,消息发送成功的话,接收不到透传消息,检查看下在注册完接收消息的监听后又加上这句吗
注:最后要通知sdk,UI 已经初始化完毕,注册了相应的receiver和listener, 可以接受broadcast了 EMChat.getInstance().setAppInited(); 离线透传消息也是走的普通透传消息的监听。

离线消息接收不到

    看下有注册离线消息监听吗EventOfflineMessage,退出程序的话或者进程不在的话,消息就接收不到了,android的离线消息保存在服务端,用户上线之后接收到。

    对于离线消息,CMD和普通的消息处理方式不太一样,CMD会被一条一条推送过来,而普通消息会在3秒左右推送一次,event data 是离线消息数组

    使用广播接收消息的话,在注册完广播监听之后,一定要加上这句 EMChat.getInstance().setAppInited();切换页面接收不到的话,看下设置的广播优先级,使用广播接收消息的话,普通消息和离线消息走的是同一个广播NewMessageBroadcastReceiver()。
4
评论

关于Android在添加好友时邀请收不到的问题 环信_Android

王庆伟 发表了文章 • 2906 次浏览 • 2016-02-15 19:37 • 来自相关话题

    在我们集成环信的sdk时,经常会遇到这样一个问题,在我们添加好友时,邀请发出了但是那边却收不到的尴尬情况,针对这样的问题,系统的分析一下,这其中可能的原因:
 1. 首先我们要看看好友监听是否在application或MainActivity中注册,要保证在接收邀请时,监听处于监听状态,也就是没有被消毁和取消注册。
2. 检查监听注册是否正确,在监听的下方是否加了:EMChat.getInstance().setAppInited();
3. 打个断点看看,这个好友邀请的监听onContactInvited(String username,String reason)是否在执行(见Demo中DemoHelper),具体代码如下:public void onContactInvited(String username, String reason) {
// 接到邀请的消息,如果不处理(同意或拒绝),掉线后,服务器会自动再发过来,所以客户端不需要重复提醒
List<InviteMessage> msgs = inviteMessgeDao.getMessagesList();

for (InviteMessage inviteMessage : msgs) {
if (inviteMessage.getGroupId() == null && inviteMessage.getFrom().equals(username)) {
inviteMessgeDao.deleteMessage(username);
}
}
// 自己封装的javabean
InviteMessage msg = new InviteMessage();
msg.setFrom(username);
msg.setTime(System.currentTimeMillis());
msg.setReason(reason);
Log.d(TAG, username + "请求加你为好友,reason: " + reason);
// 设置相应status
msg.setStatus(InviteMesageStatus.BEINVITEED);
notifyNewIviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
}
 
   当然,类似的群组邀请收不到的问题也是类似的,具体排查思路和上面雷同,邀请监听的代码如下:/**
* 群组变动监听
*/
class MyGroupChangeListener implements EMGroupChangeListener {

@Override
public void onInvitationReceived(String groupId, String groupName, String inviter, String reason) {

boolean hasGroup = false;
for (EMGroup group : EMGroupManager.getInstance().getAllGroups()) {
if (group.getGroupId().equals(groupId)) {
hasGroup = true;
break;
}
}
if (!hasGroup)
return;

// 被邀请
String st3 = appContext.getString(R.string.Invite_you_to_join_a_group_chat);
EMMessage msg = EMMessage.createReceiveMessage(Type.TXT);
msg.setChatType(ChatType.GroupChat);
msg.setFrom(inviter);
msg.setTo(groupId);
msg.setMsgId(UUID.randomUUID().toString());
msg.addBody(new TextMessageBody(inviter + " " +st3));
// 保存邀请消息
EMChatManager.getInstance().saveMessage(msg);
// 提醒新消息
getNotifier().viberateAndPlayTone(msg);
//发送local广播
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onInvitationAccpted(String groupId, String inviter, String reason) {
}
@Override
public void onInvitationDeclined(String groupId, String invitee, String reason) {
}

@Override
public void onUserRemoved(String groupId, String groupName) {
//TODO 提示用户被T了,demo省略此步骤
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onGroupDestroy(String groupId, String groupName) {
// 群被解散
//TODO 提示用户群被解散,demo省略
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationReceived(String groupId, String groupName, String applyer, String reason) {

// 用户申请加入群聊
InviteMessage msg = new InviteMessage();
msg.setFrom(applyer);
msg.setTime(System.currentTimeMillis());
msg.setGroupId(groupId);
msg.setGroupName(groupName);
msg.setReason(reason);
Log.d(TAG, applyer + " 申请加入群聊:" + groupName);
msg.setStatus(InviteMesageStatus.BEAPPLYED);
notifyNewIviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationAccept(String groupId, String groupName, String accepter) {

String st4 = appContext.getString(R.string.Agreed_to_your_group_chat_application);
// 加群申请被同意
EMMessage msg = EMMessage.createReceiveMessage(Type.TXT);
msg.setChatType(ChatType.GroupChat);
msg.setFrom(accepter);
msg.setTo(groupId);
msg.setMsgId(UUID.randomUUID().toString());
msg.addBody(new TextMessageBody(accepter + " " +st4));
// 保存同意消息
EMChatManager.getInstance().saveMessage(msg);
// 提醒新消息
getNotifier().viberateAndPlayTone(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationDeclined(String groupId, String groupName, String decliner, String reason) {
// 加群申请被拒绝,demo未实现
}
}
  查看全部
    在我们集成环信的sdk时,经常会遇到这样一个问题,在我们添加好友时,邀请发出了但是那边却收不到的尴尬情况,针对这样的问题,系统的分析一下,这其中可能的原因:
 1. 首先我们要看看好友监听是否在application或MainActivity中注册,要保证在接收邀请时,监听处于监听状态,也就是没有被消毁和取消注册。
2. 检查监听注册是否正确,在监听的下方是否加了:EMChat.getInstance().setAppInited();
3. 打个断点看看,这个好友邀请的监听onContactInvited(String username,String reason)是否在执行(见Demo中DemoHelper),具体代码如下:
public void onContactInvited(String username, String reason) {
// 接到邀请的消息,如果不处理(同意或拒绝),掉线后,服务器会自动再发过来,所以客户端不需要重复提醒
List<InviteMessage> msgs = inviteMessgeDao.getMessagesList();

for (InviteMessage inviteMessage : msgs) {
if (inviteMessage.getGroupId() == null && inviteMessage.getFrom().equals(username)) {
inviteMessgeDao.deleteMessage(username);
}
}
// 自己封装的javabean
InviteMessage msg = new InviteMessage();
msg.setFrom(username);
msg.setTime(System.currentTimeMillis());
msg.setReason(reason);
Log.d(TAG, username + "请求加你为好友,reason: " + reason);
// 设置相应status
msg.setStatus(InviteMesageStatus.BEINVITEED);
notifyNewIviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_CONTACT_CHANAGED));
}

 
   当然,类似的群组邀请收不到的问题也是类似的,具体排查思路和上面雷同,邀请监听的代码如下:
/**
* 群组变动监听
*/
class MyGroupChangeListener implements EMGroupChangeListener {

@Override
public void onInvitationReceived(String groupId, String groupName, String inviter, String reason) {

boolean hasGroup = false;
for (EMGroup group : EMGroupManager.getInstance().getAllGroups()) {
if (group.getGroupId().equals(groupId)) {
hasGroup = true;
break;
}
}
if (!hasGroup)
return;

// 被邀请
String st3 = appContext.getString(R.string.Invite_you_to_join_a_group_chat);
EMMessage msg = EMMessage.createReceiveMessage(Type.TXT);
msg.setChatType(ChatType.GroupChat);
msg.setFrom(inviter);
msg.setTo(groupId);
msg.setMsgId(UUID.randomUUID().toString());
msg.addBody(new TextMessageBody(inviter + " " +st3));
// 保存邀请消息
EMChatManager.getInstance().saveMessage(msg);
// 提醒新消息
getNotifier().viberateAndPlayTone(msg);
//发送local广播
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onInvitationAccpted(String groupId, String inviter, String reason) {
}
@Override
public void onInvitationDeclined(String groupId, String invitee, String reason) {
}

@Override
public void onUserRemoved(String groupId, String groupName) {
//TODO 提示用户被T了,demo省略此步骤
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onGroupDestroy(String groupId, String groupName) {
// 群被解散
//TODO 提示用户群被解散,demo省略
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationReceived(String groupId, String groupName, String applyer, String reason) {

// 用户申请加入群聊
InviteMessage msg = new InviteMessage();
msg.setFrom(applyer);
msg.setTime(System.currentTimeMillis());
msg.setGroupId(groupId);
msg.setGroupName(groupName);
msg.setReason(reason);
Log.d(TAG, applyer + " 申请加入群聊:" + groupName);
msg.setStatus(InviteMesageStatus.BEAPPLYED);
notifyNewIviteMessage(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationAccept(String groupId, String groupName, String accepter) {

String st4 = appContext.getString(R.string.Agreed_to_your_group_chat_application);
// 加群申请被同意
EMMessage msg = EMMessage.createReceiveMessage(Type.TXT);
msg.setChatType(ChatType.GroupChat);
msg.setFrom(accepter);
msg.setTo(groupId);
msg.setMsgId(UUID.randomUUID().toString());
msg.addBody(new TextMessageBody(accepter + " " +st4));
// 保存同意消息
EMChatManager.getInstance().saveMessage(msg);
// 提醒新消息
getNotifier().viberateAndPlayTone(msg);
broadcastManager.sendBroadcast(new Intent(Constant.ACTION_GROUP_CHANAGED));
}

@Override
public void onApplicationDeclined(String groupId, String groupName, String decliner, String reason) {
// 加群申请被拒绝,demo未实现
}
}

 
0
评论

用户客户端收到大量的透传消息和普通消息时,在透传消息的监听里面去创建消息去importmessage,然后会出现消息发送的回调走的onerror,但是对方已经收到了,这个会是什么原因导致的。 环信_Android

环信专业服务 发表了文章 • 619 次浏览 • 2016-01-27 00:00 • 来自相关话题

在透传监听那块不可以调用importmessage,因为这里面有个notify的提醒会导致一些其他的问题,如果想保存的话可以调用saveMessage这个方法即可。
在透传监听那块不可以调用importmessage,因为这里面有个notify的提醒会导致一些其他的问题,如果想保存的话可以调用saveMessage这个方法即可。
0
评论

接收不到透传,请问是什么原因? 环信_Android

环信专业服务 发表了文章 • 983 次浏览 • 2016-01-27 00:00 • 来自相关话题

如果普通消息能收到的话就要看EMChat.getInstance().setAppInited();添加了没。(只用调一次即可,建议放到主activity中)。
如果普通消息能收到的话就要看EMChat.getInstance().setAppInited();添加了没。(只用调一次即可,建议放到主activity中)。
0
评论

多个客户端登录同一个环信账号,前一个用户被踢,走了回调onConnectionConflict()方法,然后我去调用EMChat.getInstance().isLoggedIn();依然是true ,请问是什么原因呢? 环信_Android

环信专业服务 发表了文章 • 2406 次浏览 • 2016-01-27 00:00 • 来自相关话题

虽然走了onConnectionConflict()回调,有可能没做logout处理,这就比如一个设备登陆A账号后断网然后另一个设备再登录A账号,等原设备联网后还是会登录A账号。
虽然走了onConnectionConflict()回调,有可能没做logout处理,这就比如一个设备登陆A账号后断网然后另一个设备再登录A账号,等原设备联网后还是会登录A账号。
1
评论

你们的log日志在哪? 环信_Android

环信专业服务 发表了文章 • 487 次浏览 • 2016-01-27 00:00 • 来自相关话题

/sdcard/Android/data/your_packet/日期/000.html。注意是html格式的。
/sdcard/Android/data/your_packet/日期/000.html。注意是html格式的。
0
评论

环信sdk的数据库中有个表是用来存储token的,这个token的用处在哪里?这个token在sdk里的作用和应用场景是什么? 环信_Android

环信专业服务 发表了文章 • 693 次浏览 • 2016-01-27 00:00 • 来自相关话题

token是用来验证客户身份的,没有合法的token是没法链接服务器的。Token一般是上传下载附件是需要用到的一个认证。
token是用来验证客户身份的,没有合法的token是没法链接服务器的。Token一般是上传下载附件是需要用到的一个认证。
0
评论

请问下,环信发送图片那里是断点发送的吗?如果断开了,隔了一段时间,怎么重连? 环信_Android

环信专业服务 发表了文章 • 912 次浏览 • 2016-01-27 00:00 • 来自相关话题

图片发送不会断点续传,发送不成功超时后会出现一个叹号,点击之后会重新发送。
图片发送不会断点续传,发送不成功超时后会出现一个叹号,点击之后会重新发送。
0
评论

关于打包混淆有注意的吗? 环信_Android

环信专业服务 发表了文章 • 763 次浏览 • 2016-01-27 00:00 • 来自相关话题

如果apk要打包混淆的话,要关闭debug模式。
如果apk要打包混淆的话,要关闭debug模式。
0
评论

环信安卓demo清除缓存的功能在哪? 环信_Android

环信专业服务 发表了文章 • 1148 次浏览 • 2016-01-27 00:00 • 来自相关话题

没有只清除内存的方法,deleteConversation和clearConversation都会删除会话和本地db中的记录。不同的是clearConversation会在内存中保留会话对象。demo中调clearConversation清空后没有在会话列表显示出空会话,是因为对消息数为零的会话做了过滤。 查看全部
没有只清除内存的方法,deleteConversation和clearConversation都会删除会话和本地db中的记录。不同的是clearConversation会在内存中保留会话对象。demo中调clearConversation清空后没有在会话列表显示出空会话,是因为对消息数为零的会话做了过滤。
0
评论

好友列表的回调正要回来,这时我的网络断了,几天或者更长时间后,我重新连接上了,回调还会来吗? 环信_Android

环信专业服务 发表了文章 • 588 次浏览 • 2016-01-27 00:00 • 来自相关话题

当再次连接到服务器,肯定会收到回调的。
当再次连接到服务器,肯定会收到回调的。
0
评论

我们接受不到消息了,但退出重登就会收到上次没收到的。这个可能是什么问题? 环信_Android

环信专业服务 发表了文章 • 950 次浏览 • 2016-01-27 00:00 • 来自相关话题

一种情况可能你被踢了但没做登出处理,另一种情况可能在没调登出前多次调用登陆。
一种情况可能你被踢了但没做登出处理,另一种情况可能在没调登出前多次调用登陆。
0
评论

添加好友申请,接收方sdk有打印收到申请,监听收不到,同时打印这句话:received roster presence, but app is not ready,请问是什么原因? 环信_Android

环信专业服务 发表了文章 • 919 次浏览 • 2016-01-27 00:00 • 来自相关话题

这个是因为没有添加 EMChat.getInstance().setAppInited();
这个是因为没有添加 EMChat.getInstance().setAppInited();
0
评论

环信是否有登陆状态的判断? 环信_Android

环信专业服务 发表了文章 • 2166 次浏览 • 2016-01-27 00:00 • 来自相关话题

可以用EMChat.getInstance().isLoggedIn();
可以用EMChat.getInstance().isLoggedIn();
1
评论

客户端到客户端的消息加密应该调什么API呢? 环信_Android

环信专业服务 发表了文章 • 830 次浏览 • 2016-01-27 00:00 • 来自相关话题

客户可以先把消息内容按照自己的算法加密之后再通过环信来发送,iOS的回调是EMChatManagerEncryptionDelegate.h;安卓是EncryptProvider,接口说明在http://www.easemob.com/apidoc/android/chat/ 查看全部
客户可以先把消息内容按照自己的算法加密之后再通过环信来发送,iOS的回调是EMChatManagerEncryptionDelegate.h;安卓是EncryptProvider,接口说明在http://www.easemob.com/apidoc/android/chat/
0
评论

我调用了两次login,结果app打包出来报错。 环信_Android

环信专业服务 发表了文章 • 744 次浏览 • 2016-01-27 00:00 • 来自相关话题

只建议调用一次login,在登陆时可以添加个是否已经登陆的判断,登录了就不必再次登陆。
只建议调用一次login,在登陆时可以添加个是否已经登陆的判断,登录了就不必再次登陆。
0
评论

SDK默认是自动登陆的,我想改成手动登陆的可以吗? 环信_Android

环信专业服务 发表了文章 • 1220 次浏览 • 2016-01-27 00:00 • 来自相关话题

可以,只要调用EMChat.getInstance().setAutoLogin(false)放在SDK初始化的前边就行
可以,只要调用EMChat.getInstance().setAutoLogin(false)放在SDK初始化的前边就行