Android xmpp基于smack4.1.2基本功能使用
来源:互联网 发布:李炎恢php素材 编辑:程序博客网 时间:2024/06/05 06:17
首先得下载openfire,然后点击bin文件下的exe文件,按照步骤一步步配置可参考http://www.cnblogs.com/maxinliang/p/3582924.html,注意在设置连接数据库时,首先得在数据库中创建一个名为openfire的数据库。同时可以下载Spark进行测试。
然后,添加依赖和网络连接权限
compile("org.igniterealtime.smack:smack-android-extensions:4.1.2") { exclude group: 'xpp3', module: 'xpp3' } compile("org.igniterealtime.smack:smack-android:4.1.2") { exclude group: 'xpp3', module: 'xpp3' } compile("org.igniterealtime.smack:smack-tcp:4.1.2") { exclude group: 'xpp3', module: 'xpp3' } compile("org.igniterealtime.smack:smack-im:4.1.2") { exclude group: 'xpp3', module: 'xpp3' }<uses-permission android:name="android.permission.INTERNET" />
其次连接配置:
String server = "";//openfire主机ipint port = 5222;XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();builder.setServiceName("");//openfire主机名称builder.setHost(server);builder.setPort(port);builder.setCompressionEnabled(false);builder.setDebuggerEnabled(true);builder.setSendPresence(true);builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);XMPPTCPConnection connection = new XMPPTCPConnection(builder.build());
连接到xmpp,网络请求的耗时操作一般写在线程中:
new Thread(new Runnable() { @Override public void run() { try { connection.connect(); } catch (SmackException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XMPPException e) { e.printStackTrace(); } } }).start();
实现用户注册,注册用户名与密码,这里写了封装一个方法通过int型返回值判断成功或者失败:
public int register(String account, String password) { AccountManager.sensitiveOperationOverInsecureConnectionDefault(true); try { AccountManager.getInstance(connection).createAccount(account,password);//注册 return 0; } catch (SmackException.NoResponseException e) { e.printStackTrace(); return 1; } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); return 2; } catch (SmackException.NotConnectedException e) { e.printStackTrace(); return 3; } }
注册成功后,可进行登录,这个很简单:
connection.login(account,password);
登录成功后则需要获取好友列表,注意一定要在确认登录成功后再获取,因为登录是在线程中,所以这里大多会有一定的延时:
List<RosterEntry> entryList = new ArrayList<RosterEntry>(); Roster roster = Roster.getInstanceFor(connection); Set<RosterEntry> entries = roster.getEntries(); for (RosterEntry entry : entries){ entryList.add(entry); } return entryList;
entry中包含着好友的信息,例如通过
entry.getUser()
就可得到好友名,但这里的好友名是 账号名+@+主机名,例如account@sc-wangk1,发送消息时也需要的是这个。
得到好友列表后我们就可以实现接受和发送消息,接收消息通过实现监听:
ChatManager chatManager = ChatManager.getInstanceFor(connection); chatManager.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean createdLocally) { chat.addMessageListener(new ChatMessageListener() { @Override public void processMessage(Chat chat, Message message) { String content = message.getBody();//获取消息内容 if(content != null){ String sender = message.getFrom().substring(0,message.getFrom().indexOf("/"));//获得发送者 if ((chatRcyAdapter != null)&&(chatRecyclerView != null)){ android.os.Message me = new android.os.Message(); me.what = 1; me.obj = content; handler.sendMessage(me);//使用handler来更新UI } } } }); } });
同时也可发送消息,这里封装了一个方法:
public void sendMessage(String messageBody,String receiver){//消息内容 接收者:账号名+@+主机名 if (TextUtils.isEmpty(messageBody)){ return; } try { ChatManager chatManager = ChatManager.getInstanceFor(connection); Chat chat = chatManager.createChat(receiver);//设置接收者 chat.sendMessage(messageBody);//发送消息 } catch (SmackException.NotConnectedException e) { e.printStackTrace(); } }
然后可以查找好友,通过关键字查找:
UserSearchManager searchManager = new UserSearchManager(connection);String searchService = "search."+connection.getServiceName();Form searchForm = searchManager.getSearchForm(searchService);Form answerForm = searchForm.createAnswerForm();answerForm.setAnswer("Username",true);answerForm.setAnswer("search",usernameStr.trim());//usernameStr就是关键字,是String类型ReportedData results=searchManager.getSearchResults(answerForm,searchService);List<ReportedData.Row>rows=results.getRows();for (ReportedData.Row row:rows){ String username=row.getValues("Username").get(0);//得到查询到的好友名}
阅读全文
0 0
- Android xmpp基于smack4.1.2基本功能使用
- 使用Android+smack4.1.4+openfire进行IM开发
- 使用Android+smack4.1.4+openfire进行IM开发
- Android基于XMPP 系列
- 开端:XMPP开发 Smack4.1+Openfire
- Android 使用Smack+openfire开发基于XMPP协议的聊天
- 基于xmpp的android即时通讯
- XMPP-Android基于openfire+asmack
- Android 实现聊天-smack4.19
- 关于使用smack4.x 在android平台开发时的jar包问题小结
- android 搭建Smack4.2.1 使用openfire 的流程和各种坑
- android基本功能
- 基于XMPP协议的Android IM
- Android 基于XMPP协议连接GTalk
- 基于XMPP协议的Android IM研究
- 基于XMPP协议的Android IM研究
- Android 基于xmpp的即时通信Demo
- 基于XMPP协议的Android IM研究
- 说真的,要是从没认识过你就好了
- mysql开机自启动设置
- BZOJ 1176: [Balkan2007]Mokia/2683: 简单题
- AngularJS控制器(Controller)
- 机器学习系列(19)_通用机器学习流程与问题解决架构模板
- Android xmpp基于smack4.1.2基本功能使用
- JVM(2):JVM内存结构
- 浅谈Dubbo架构
- 图片的三级缓存
- Coursera-Deep Learning Specialization 课程之(一):Neural Networks and Deep Learning-weak2
- JVM(3):Java GC算法 垃圾收集器
- 线程池的使用
- 三门问题(Monty Hall problem)简析
- 10.10离线赛