Android Smack开发笔记
2019-08-05 11:21
71 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014714188/article/details/98480889
Android Smack开发笔记
此文是自己在本地进行的测试。由于openfire等都是安装在电脑上,而运行是在真机上运行的。所以在测试的时候必须保证电脑和手机是在同一个网络环境下,不然会无法连接到openfire服务器。
一、测试环境下载配置
至于测试环境的下载配置可以参考作者:https://blog.csdn.net/u013086747/article/details/75216653 该文章里面很详细的介绍了如何下载配置测试环境。
二、在安卓项目中引用smack。
我是基于smack 4.1.9开发的。
dependencies { compile 'org.igniterealtime.smack:smack-android:4.1.9' compile 'org.igniterealtime.smack:smack-tcp:4.1.9' compile 'org.igniterealtime.smack:smack-im:4.1.9' compile 'org.igniterealtime.smack:smack-extensions:4.1.9' }
三、新建config目录,在该目录下新建MyXmppConfig类继承XMPPTCPConnection。
整体代码较多,可以分开来看,每一个方法名的意思就代表了实现的功能。具体代码实现如下:
package com.xie.com.imoocmusic.config; import android.util.Log; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.ConnectionListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; public class MyXmppConfig extends XMPPTCPConnection { private static MyXmppConfig connect; public MyXmppConfig(XMPPTCPConnectionConfiguration config) { super(config); } /** * 初始化连接数据 * @return */ public static synchronized MyXmppConfig getInstance(){ //初始化配置 if (connect ==null){ XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder(); //设置连接超时的最大时间 builder.setConnectTimeout(10000); //设置登录openfire的用户名和密码 builder.setUsernameAndPassword("17761207349","123"); //设置安全模式 builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); //设置客服端类型 builder.setResource("Android"); //设置服务器名称 builder.setServiceName("xie-pc"); //设置主机地址 builder.setHost("192.168.0.130"); //设置端口号 builder.setPort(5222); //设置是否查看日志 builder.setDebuggerEnabled(true); connect = new MyXmppConfig(builder.build()); } Log.e("MyXmppConfig","connect: "+ connect); connectionListener(); return connect; } /** * 连接openfire服务器 */ public static void connectOpenfire(){ try { if (connect != null){ //如果没有连接openfire服务器,则连接;若已连接openfire服务器则跳过。 if(!connect.isConnected()){ connect.connect(); } }else { MyXmppConfig.getInstance(); connect.connect(); } }catch (Exception e){ Log.e("connectOpenfire","Exception: "+e.toString()); } } /** * * @param phone 登录用户名 * @param password 登录密码 */ public static void loginOpenfire(String phone,String password){ try { if(connect.isConnected()){ //第一个参数是 用户名(即你在openfire服务器用户管理页面创建的用户名) //第二个参数是 用户密码(同上) //connection.login("用户名", "密码") connect.login( phone, password); }else { connectOpenfire(); connect.login(phone, password); } } catch (Exception e) { Log.e("Login","Exception: "+e.toString()); } } public MyXmppConfig(CharSequence jid, String password) { super(jid, password); } public MyXmppConfig(CharSequence username, String password, String serviceName) { super(username, password, serviceName); } public static void connectionListener(){ if (connect!=null){ connect.addConnectionListener(new ConnectionListener() { @Override public void connected(XMPPConnection connection) { Log.e("connected", "connected"); } @Override public void authenticated(XMPPConnection connection, boolean resumed) { Log.e("authenticated", "authenticated"); } @Override public void connectionClosed() { Log.e("connectionClosed", "connectionClosed"); } @Override public void connectionClosedOnError(Exception e) { Log.e("connectionClosedOnError", "connectionClosedOnError"); } @Override public void reconnectionSuccessful() { Log.e("reconnectionSuccessful", "reconnectionSuccessful"); } @Override public void reconnectingIn(int seconds) { Log.e("reconnectingIn", "reconnectingIn"); } @Override public void reconnectionFailed(Exception e) { Log.e("reconnectionFailed", "reconnectionFailed"); } }); } } }
四、最后就是自己的登录测试了。
调用loginOpenfire就能看到是否成功登录。很多时候会报无法连接服务器等等,注意检查网络环境,电脑和手机是否处于同一网络环境下。
new Thread(new Runnable(){ @Override public void run() { //服务器登录 MyXmppConfig.getInstance().loginOpenfire(phone,password); } }).start();
相关文章推荐
- 菜鸟的android开发笔记 之 千里之行,始于足下(写在开始前)
- 菜鸟的android开发笔记 之 第一弹 环境部署
- Android 开发笔记—— Service
- Android 校内头像同步开发笔记
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记!
- Android 开发笔记—— Handler与异步
- Android开发学习笔记(二)——编译和运行原理(1)
- Android Map开发基础知识学习笔记
- Google.Android开发入门与实践-学习笔记3
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的优化笔记!
- 在Android上使用ZXing识别条码 二次开发笔记 (2)
- Android开发学习笔记
- Android开发学习笔记-2 Activity-1 基础
- Android开发学习笔记-7 Handler基础
- k哥的android开发笔记(更新至2012.05.03)
- Android原生(Native)C开发之五:zlib移植笔记
- android应用开发学习笔记--游戏开发
- Google.Android开发入门与实践-学习笔记4
- Android Map开发基础知识学习笔记
- 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的优化笔记!...