標籤:
前言
smack 是開發openfire用戶端的類庫,從smack4.1 開始支援android開發,之前的版本是不支援的android的 ,
在這之前都是使用asmack 類庫,但是現在asmack 已經過時了。
至於openfire的搭建這裡就不介紹了,可以看看下面這篇內容
http://blog.csdn.net/hu285279904/article/details/45103163
寫的很亂,大家就湊合著看吧
我使用的安卓開發環境是 Android Studio 1.3 其實這都無所謂,
你使用eclipse adt 也都一樣
本文
首先 從openfire 官網下載smack庫 我這裡是使用smack 4.1.3版本
:http://www.igniterealtime.org/downloads/index.jsp
壓縮包裡有很多的類庫 ,但是我們只需其中的一些類庫, 不是所有的,多說一句壓縮包裡有api文檔
我們這裡只需要如下的類庫:
1.jxmpp-core-0.4.1.jar2.jxmpp-util-cache-0.4.1.jar3.smack-android-4.1.3.jar4.smack-android-extensions-4.1.3.jar5.smack-core-4.1.3.jar6.smack-extensions-4.1.3.jar7.smack-im-4.1.3.jar8.smack-sasl-provided-4.1.3.jar9.smack-tcp-4.1.3.jar
類庫列舉完了,只需這些類庫 既可
接下來看 核心代碼了
package com.example.administrator.im;/** * Created by Administrator on 2015/8/7. */import org.jivesoftware.smack.tcp.XMPPTCPConnection;import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;public class LoginXmpp { //xmpp 伺服器位址 private static String host = "192.168.0.71"; //xmpp 伺服器連接埠 private static int prot = 5222; //xmpp 伺服器名稱 可能是電腦名稱字 private static String serviceName = "win-1pjai6ne4bf"; public static boolean login(String username, String password) { XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); //伺服器IP地址 configBuilder.setHost(host); //伺服器連接埠 configBuilder.setPort(prot); //伺服器名稱 configBuilder.setServiceName(serviceName); //是否開啟安全模式 configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled); //是否開啟壓縮 //configBuilder.setCompressionEnabled(false); //開啟偵錯模式 configBuilder.setDebuggerEnabled(true); //使用者名稱密碼 configBuilder.setUsernameAndPassword(username, password); XMPPTCPConnection connection = new XMPPTCPConnection(configBuilder.build()); try { connection.connect(); connection.login(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }}
調用核心代碼 進行登入
package com.example.administrator.im;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.EditText;import android.widget.Button;import android.view.View;import android.view.View.OnClickListener;import android.widget.Toast;import android.os.AsyncTask;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /* 初始化UI */ private void init() { final EditText usernameEdt = (EditText) findViewById(R.id.username); final EditText passwordEdt = (EditText) findViewById(R.id.password); final Button loginBtn = (Button) findViewById(R.id.loginBtn); loginBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String username = usernameEdt.getText().toString(); String password = passwordEdt.getText().toString(); if (username.equals("") || password.equals("")) { Toast.makeText(MainActivity.this, "使用者名稱或密碼不可為空", Toast.LENGTH_SHORT).show(); return; } new LoginAsyncTask().execute(username, password); } }); } /* 登入的非同步類 */ class LoginAsyncTask extends AsyncTask<String, Integer, Boolean> { @Override protected Boolean doInBackground(String... parm) { Boolean result = false; result = LoginXmpp.login(parm[0],parm[1]); return result; } @Override protected void onPostExecute(Boolean result) { if (!result) { Toast.makeText(MainActivity.this, "使用者名稱或密碼錯誤", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "登入成功", Toast.LENGTH_SHORT).show(); } } }}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
smack for android 之登入openfire