长沙列举网 > 商务服务 > 其他商务服务 > Android- 环信IM即时通讯(1)
长沙
[切换城市]

Android- 环信IM即时通讯(1)

更新时间:2016-06-15 22:31:41 浏览次数:379次
区域: 长沙 > 岳麓 > 望月湖
********************************环境配置************************<br/> 1.拷贝Demo的libs的<br/> baidumapapi_v2_1_1.jar<br/> easemobchat_2.1.3.jar<br/> locSDK_3.3.jar<br/> armeabi文件夹<br/> 2.配置权限<br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> 3.设置配置组件<br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> android:name=EASEMOB_APPKEY<br/> android:value=easemob-demo#chatdemoui /><br/> <br/> <br/> <br/> android:name=com.baidu.location.f<br/> android:enabled=true<br/> android:process=:remote /><br/> 4.Application配置<br/> <br/> <br/> public class MyApplication extends Application {<br/> <br/> public static Context appContext;<br/> <br/> @Override<br/> public void onCreate() {<br/> super.onCreate();<br/> appContext = this;<br/> int pid = android.o***cess.myPid();<br/> String processAppName = getAppName(pid);<br/> // 如果使用到百度地图或者类似启动remote service的第三方库,这个if判断不能少<br/> if (processAppName == null || processAppName.equals()) {<br/> // workaround for baidu location sdk<br/> // 百度定 位sdk,定 位服务运行在一个单独的进程,每次定 位服务启动的时候,都会调用application::onCreate<br/> // 创建新的进程。<br/> // 但环信的sdk只需要在主进程中初始化一次。 这个特殊处理是,如果从pid 找不到对应的processInfo<br/> // processName,<br/> // 则此application::onCreate 是被service 调用的,直接返回<br/> return;<br/> }<br/> // 初始化环信SDK<br/> Log.d(DemoApplication, Initialize EMChat SDK);<br/> EMChat.getInstance().init(appContext);<br/> <br/> <br/> // 获取到EMChatOptions对象<br/> EMChatOptions options = EMChatManager.getInstance().getChatOptions();<br/> // 默认添加好友时,是不需要验证的,改成需要验证<br/> options.setAcceptInvitationAlways(false);<br/> // 设置收到消息是否有新消息通知,默认为true<br/> options.setNotificationEnable(false);<br/> // 设置收到消息是否有声音提示,默认为true<br/> options.setNoticeBySound(false);<br/> // 设置收到消息是否震动 默认为true<br/> options.setNoticedByVibrate(false);<br/> // 设置语音消息播放是否???置为扬声器播放 默认为true<br/> options.setUseSpeaker(false);<br/> }<br/> <br/> <br/> private String getAppName(int pID) {<br/> String processName = null;<br/> ActivityManager am = (ActivityManager) this<br/> .getSystemService(ACTIVITY_SERVICE);<br/> List l = am.getRunningAppProcesses();<br/> Iterator i = l.iterator();<br/> PackageManager pm = this.getPackageManager();<br/> while (i.hasNext()) {<br/> ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i<br/> .next());<br/> try {<br/> if (info.pid == pID) {<br/> CharSequence c = pm.getApplicationLabel(pm<br/> .getApplicationInfo(inf***cessName,<br/> PackageManager.GET_META_DATA));<br/> processName = inf***cessName;<br/> return processName;<br/> }<br/> } catch (Exception e) <br/> return processName;<br/> }<br/> <br/> <br/> }<br/> <br/> *************************注册/登陆/退出*******************************<br/> 1.注册<br/> private void regist() {<br/> new Thread(new Runnable() {<br/> public void run() {<br/> try {<br/> // 调用sdk注册方法<br/> EMChatManager.getInstance().createAccountOnServer(<br/> name.getText().toString(), pwd.getText().toString());<br/> } catch (final EaseMobException e) {<br/> int errorCode=e.getErrorCode();<br/> if(errorCode==EMError.NONETWORK_ERROR){<br/> //网络异常,请检查网络!<br/> }else if(errorCode==EMError.USER_ALREADY_EXISTS){<br/> //用户已存在!<br/> }else if(errorCode==EMError.UNAUTHORIZED){<br/> //注册失败,无权限!<br/> }else{<br/> //注册失败 <br/> }<br/> }<br/> }<br/> }).start();<br/> }<br/> <br/> <br/> 2.登陆<br/> EMChatManager.getInstance().login(name.getText().toString(),<br/> pwd.getText().toString(), new EMCallBack() {<br/> <br/> <br/> @Override<br/> public void onSuccess() {<br/> Log.v(Lean, 登陆成功);<br/> // 1.保存帐号密码<br/> // save name and pwd<br/> // 2.更新当前用户的nickname 此方法的作用是在ios离线推送时能够显示用户nick<br/> boolean updatenick = EMChatManager.getInstance()<br/> .updateCurrentUserNick(<br/> name.getText().toString());<br/> if (!updatenick) {<br/> // update current user nick fail<br/> }<br/> }<br/> <br/> <br/> @Override<br/> public void onProgress(int progress, String status) <br/> <br/> <br/> @Override<br/> public void onError(int code, String message) {<br/> Log.v(Lean, 登陆失败);<br/> }<br/> });<br/> 3.顶号处理/强制下线处理<br/> private class MyConnectionListener implements EMConnectionListener {<br/> <br/> <br/> @Override<br/> public void onConnected() {<br/> runOnUiThread(new Runnable() {<br/> @Override<br/> public void run() );<br/> }<br/> <br/> <br/> @Override<br/> public void onDisconnected(final int error) {<br/> runOnUiThread(new Runnable() {<br/> <br/> <br/> @Override<br/> public void run() {<br/> if (error == EM***NNECTION_CONFLICT) {<br/> // 显示帐号在其他设备登陆dialog<br/> } else {<br/> if (NetUtils.hasNetwork(MainActivity.this))<br/> //连接不到聊天服务器<br/> else<br/> //当前网络不可用,请检查网络设置<br/> }<br/> }<br/> <br/> <br/> });<br/> }<br/> }<br/> <br/> <br/> 4.退出<br/> MChatManager.getInstance().logout();//此方法为同步方法<br/> 或者<br/> EMChatManager.getInstance().logout(new EMCallBack(){})//此方法为异步方法<br/> //后文中,如遇到new EMCallBack()即为new EMCallBack(){}<br/> <br/> <br/> **************************界面管理******************************<br/> public class BaseActivity extends Activity{<br/> <br/> @Override<br/> protected void onResume() {<br/> super.onResume();<br/> // onresume时,取消notification显示<br/> EMChatManager.getInstance().activityResumed();<br/> }<br/> <br/> @Override<br/> protected void onDestroy() {<br/> super.onDestroy();<br/> EMChatManager.getInstance().logout();<br/> }<br/> <br/> }<br/> <br/> <br/> **************************好友管理******************************<br/> 1.获取好友列表(异步)<br/> new Thread(new Runnable() {<br/> @Override<br/> public void run() {<br/> try {<br/> List usernames=EMContactManager.getInstance().<br/> getContactUserNames();<br/> Message msg=new Message();<br/> msg.what=1;<br/> msg.obj=usernames;<br/> mHandler.sendMessage(msg);<br/> } catch (EaseMobException e) {<br/> Log.v(Lean,e.getMessage()+ +e.getErrorCode());<br/> }<br/> }<br/> }).start();<br/> 2.添加好友申请<br/> try {<br/> EMContactManager.getInstance()<br/> .addContact(user_name.getText().toString(),加我吧!);<br/> } catch (EaseMobException e) {}<br/> 3.同意添加好友(异步)<br/> new Thread(new Runnable() {<br/> @Override<br/> public void run() {<br/> try {<br/> EMChatManager.getInstance().acceptInvitation(username);<br/> Message msg=new Message();<br/> msg.what=0;<br/> mHandler.sendMessage(msg);<br/> } catch (EaseMobException e) {<br/> // TODO<br/> }<br/> }<br/> }).start();<br/> 3.删除好友<br/> try {<br/> EMContactManager.getInstance()<br/> .deleteContact(((TextView)arg1).getText().toString());<br/> } catch (EaseMobException e) {}<br/> <br/> 4.好友器<br/> Tip:<br/> EMContactManager.getInstance().setContactListener(new MyContactListener());<br/> //设置器完毕必须调用如下代码 保证器等运行正常<br/> EMChat.getInstance().setAppInited();<br/> <br/> <br/> /***<br/> * 好友变化listener<br/> * <br/> */<br/> private class MyContactListener implements EMContactListener {<br/> <br/> <br/> @Override<br/> public void onContactAdded(List usernameList) {<br/> Log.v(Lean,onContactAdded..);<br/> }<br/> <br/> <br/> @Override<br/> public void onContactDeleted(final List usernameList) {<br/> Log.v(Lean,onContactDeleted..); <br/> }<br/> <br/> <br/> @Override<br/> public void onContactInvited(String username, String reason) {<br/> Log.v(Lean,onContactInvited..);<br/> }<br/> <br/> <br/> @Override<br/> public void onContactAgreed(String username) {<br/> Log.v(Lean,onContactAgreed..);<br/> }<br/> <br/> <br/> @Override<br/> public void onContactRefused(String username) {<br/> Log.d(username, username + 拒绝了你的好友请求);<br/> }<br/> <br/> <br/> } <br/> <br/> <br/> **************************单聊******************************<br/> 1.发送(文字/图片)消息<br/> // 获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此<br/> EMConversation conversation = EMChatManager.getInstance()<br/> .getConversation(userName);<br/> // 创建一条文本消息<br/> EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);<br/> // 设置消息body<br/> TextMessageBody txtBody = new TextMessageBody(mSendMsg.getText()<br/> .toString());<br/> message.addBody(txtBody);<br/> <br/> message.setFrom(MyApplication.userName);<br/> message.setTo(userName);<br/> message.setMsgTime(System.currentTimeMillis());<br/> message.setReceipt(userName);<br/> // 把消息加入到此会话对象中<br/> conversation.addMessage(message);<br/> // 发送消息<br/> EMChatManager.getInstance().sendMessage(message, null);<br/> 2.接收消息<br/> 2-1.动态注册<br/> NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();<br/> IntentFilter intentFilter = new IntentFilter(EMChatManager<br/> .getInstance().getNewMessageBroadcastAction());<br/> intentFilter.setPriority(3);<br/> registerReceiver(msgReceiver, intentFilter);<br/> 2-2.实现BroadcastReceiver<br/> private class NewMessageBroadcastReceiver extends BroadcastReceiver {<br/> @Override<br/> public void onReceive(Context context, Intent intent) {<br/> // 消息id<br/> String msgId = intent.getStringExtra(msgid);<br/> // 发消息的人的username(userid)<br/> // String msgFrom = intent.getStringExtra(from);<br/> // 消息类型,文本,图片,语音消息等,这里返回的值为msg.type.ordinal()。<br/> // 所以消息type实际为是enum类型<br/> // int msgType = intent.getIntExtra(type, 0);<br/> // 更方便的方法是通过msgId直接获取整个message<br/> EMMessage message = EMChatManager.getInstance().getMessage(msgId);<br/> //TODO 刷新界面数据<br/> }<br/> }<br/> <br/> 3.记录<br/> //特定用户聊天记录并刷新界面<br/> EMChatManager.getInstance().clearConversation(userName);<br/> <br/> 4.发送特定消息<br/> 4-1.只要在发送的时候对EMMessage增加属性就可以了 如下:<br/> EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);<br/> message.setAttribute(USERAGE, 18);<br/> message.setAttribute(USERNAME, Lean);<br/> 4-2.在广播接收者接收到EMMessage后,对其做取属性操作:<br/> EMMessage message = EMChatManager.getInstance().getMessage(msgId);<br/> try {<br/> Log.v(Lean, message.getStringAttribute(USERNAME));<br/> Log.v(Lean, message.getIntAttribute(USERAGE) + );<br/> } catch (EaseMobException e) {<br/> e.printStackTrace();<br/> }<br/> <br/> <br/> 5.存取聊天记录(未研究)<br/> <br/> <br/> **************************群聊******************************<br/> 新建/解散群聊<br/> //groupName:要创建的群聊的名称<br/> //desc:群聊简介<br/> //members:群聊成员,为空时这个创建的群组只包含自己<br/> //allowInvite:是否允许群成员邀请人进群<br/> EMGroupManager.getInstance().createPrivateGroup(groupName, desc, members,allowInvite);<br/> //前一种方法创建的群聊默认大群??用户数为200,传入maxUsers后设置自定义的大用户数,大为2000<br/> EMGroupManager.getInstance().createPrivateGroup(groupName, desc, members,allowInvite,maxUsers);<br/> <br/> //解散群聊<br/> EMGroupManager.getInstance().exitAndDeleteGroup(groupId);<br/> <br/> <br/> 群聊加人/减人<br/> //群主加人调用此方法<br/> EMGroupManager.getInstance().addUsersToGroup(groupId, newmembers);<br/> //私有群里,如果开放了群成员邀请,群成员邀请调用下面方法<br/> EMGroupManager.getInstance().inviteUser(groupId, newmembers, null);<br/> <br/> //把username从群聊里删除<br/> EMGroupManager.getInstance().removeUserFromGroup(groupId, username);<br/> <br/> <br/> 加入/退出某个群聊<br/> //如果群开群是自由加入的,即group.isMembersOnly()为false,直接join<br/> EMGroupManager.getInstance().joinGroup(groupid);<br/> //需要申请和验证才能加入的,即group.isMembersOnly()为true,调用下面方法<br/> EMGroupManager.getInstance().applyJoinToGroup(groupid, 求加入);<br/> //退出群<br/> EMGroupManager.getInstance().exitFromGroup(groupId);<br/> <br/> 获???群组信息<br/> //根据群聊ID从本地获取群聊信息<br/> EMGroup group = EMGroupManager.getInstance().getGroup(groupId);<br/> //根据群聊ID从服务器获取群聊信息<br/> EMGroup group =EMGroupManager.getInstance().getGroupFromServer(groupId);<br/> //保存获取下来的群聊信息<br/> EMGroupManager.getInstance().createOrUpdateLocalGroup(returnGroup);<br/> group.getMembers();//获取群成员<br/> group.getOwner();//获取群主<br/> ......<br/> <br/> 修改群名称<br/> EMGroupManager.getInstance().changeGroupName(, {changedGroupName});<br/> <br/> 获取群聊列表<br/> //从服务器获取自己加入的和创建的群聊列表,此api获取的群组sdk会自动保存到内存和db。<br/> //注意,获取到的列表里的群聊只有groupname和groupid等简单配置信息<br/> List grouplist = EMGroupManager.getInstance().getGroupsFromServer();<br/> <br/> <br/> //从本地加载群聊列表<br/> List grouplist = EMGroupManager.getInstance().getAllGroups();<br/> <br/> <br/> //获取所有公开群列表<br/> List groupsList = EMGroupManager.getInstance().getAllPublicGroupsFromServer();<br/> <br/> <br/> 屏蔽群消息/解除屏蔽群<br/> //屏蔽群消息后,就不能接收到此群的消息 (??创建者不能屏蔽群消息)<br/> //根据groupid屏蔽此群所有发来的消息<br/> EMGroupManager.getInstance().blockGroupMessage(groupId);<br/> <br/> //解除屏蔽群后,就可以正常收到群的所有消息<br/> EMGroupManager.getInstance().unblockGroupMessage(groupId);-<br/> <br/> <br/> 消息只显数目<br/> //如果群聊只是想提示数目,不响铃。可以通过此属性设置,此属性是本地属性<br/> EMChatManager.getInstance().getChatOptions().setReceiveNotNoifyGroup()<br/> <br/> 群聊事件<br/> EMGroupManager.getInstance().addGroupChangeListener(new GroupChangeListener() {<br/> @Override<br/> public void onUserRemoved(String groupId, String groupName) {<br/> //当前用户被管理员移除出群聊<br/> }<br/> @Override<br/> public void onInvitationReceived(String groupId, String groupName, String inviter, String reason) {<br/> //收到加入群聊的邀请<br/> }<br/> @Override<br/> public void onInvitationDeclined(String groupId, String invitee, String reason) {<br/> //群聊邀请被拒绝<br/> }<br/> @Override<br/> public void onInvitationAccpted(String groupId, String inviter, String reason) {<br/> //群???邀请被接受<br/> }<br/> @Override<br/> public void onGroupDestroy(String groupId, String groupName) {<br/> //群聊被创建者解散<br/> }<br/> @Override<br/> public void onApplicationReceived(String groupId, String groupName, String applyer, String reason) {<br/> //收到加群申请<br/> }<br/> @Override<br/> public void onApplicationAccept(String groupId, String groupName, String accepter) {<br/> //加群申请被同意<br/> }<br/> @Override<br/> public void onApplicationDeclined(String groupId, String groupName, String decliner, String reason) {<br/> // 加群申请被拒绝<br/> }<br/> });<br/> <br/> <br/> 把用户移入黑名单/把用户移除黑名单/获取黑名单列表(未研究)
长沙其他商务服务相关信息
3小时前
1天前
2天前
2天前
3天前
注册时间:2016年02月16日
UID:268976
---------- 认证信息 ----------

查看用户主页