
MainActivity.java
-
package cn.com.xiebiao.mytest;
-
-
import android.app.Activity;
-
import android.os.Bundle;
-
import android.os.Handler;
-
import android.view.View;
-
import android.widget.Button;
-
import android.widget.EditText;
-
-
import org.jivesoftware.smack.AccountManager;
-
import org.jivesoftware.smack.Chat;
-
import org.jivesoftware.smack.ChatManager;
-
import org.jivesoftware.smack.ChatManagerListener;
-
import org.jivesoftware.smack.ConnectionConfiguration;
-
import org.jivesoftware.smack.MessageListener;
-
import org.jivesoftware.smack.XMPPConnection;
-
import org.jivesoftware.smack.XMPPException;
-
import org.jivesoftware.smack.packet.Message;
-
import org.jivesoftware.smack.packet.Presence;
-
-
public class MainActivity extends Activity {
-
private EditText editText;
-
private EditText editText2;
-
private Button button;
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
-
editText=(EditText)this.findViewById(R.id.editText);
-
editText2=(EditText)this.findViewById(R.id.editText2);
-
button=(Button)this.findViewById(R.id.button);
-
-
//hander接收监听器线程回传的数据
-
final Handler handler=new Handler(){
-
@Override
-
public void handleMessage(android.os.Message msg) {
-
Bundle bundle=msg.getData();
-
String message=bundle.getString("message");
-
editText2.setText(message);
-
}
-
};
-
-
//启动通信线程
-
new Thread(new Runnable() {
-
@Override
-
public void run() {
-
try {
-
//允许调试
-
XMPPConnection.DEBUG_ENABLED=true;
-
//账户管理类
-
AccountManager accountManager;
-
//连接配置
-
ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("192.168.1.102", 5222,"xiebiao.com.cn");
-
connectionConfiguration.setReconnectionAllowed(true);
-
connectionConfiguration.setSendPresence(true);
-
//建立XMPP连接
-
XMPPConnection xmppConnection = new XMPPConnection(connectionConfiguration);
-
xmppConnection.connect();
-
//登录
-
xmppConnection.login("liulijuan", "123456");
-
-
System.out.println("用户:"+xmppConnection.getUser()+"登录成功");
-
-
//登录状态
-
Presence presence=new Presence(Presence.Type.available);
-
xmppConnection.sendPacket(presence);
-
-
//获取聊天管理对象
-
ChatManager chatManager=xmppConnection.getChatManager();
-
-
//添加监听器,接收来自服务器的转发过来的消息,是条独立的线程,所以必须通过线程间通讯的机制将message传递给UI主线程
-
chatManager.addChatListener(new ChatManagerListener() {
-
@Override
- public void chatCreated(Chat chat, final boolean b) {
-
-
chat.addMessageListener(new MessageListener() {
-
@Override
- public void processMessage(Chat chat, Message message) {
-
-
System.out.println("--->>收到来自"+message.getFrom() + "的消息:"+message.getBody());
-
-
//将消息传给UI主线程更新数据
-
android.os.Message message1=handler.obtainMessage();
-
Bundle bundle=new Bundle();
-
bundle.putString("message",message.getBody());
-
message1.setData(bundle);
-
message1.sendToTarget();
-
editText2.setText(message.getBody());
-
}
-
});
-
}
-
});
-
-
//一个chat是一条线程,createChat()的第二个参数为一个MessageListener,我们设为null
-
final Chat chat=chatManager.createChat("admin@xiebiao.com.cn",null);
-
-
//button监听器属于主线程,所以editText.setText()有效
-
button.setOnClickListener(new View.OnClickListener() {
-
@Override
-
public void onClick(View view) {
-
String message = editText.getText().toString();
-
try {
-
chat.sendMessage(message);
-
editText.setText("");
-
} catch (XMPPException e) {
-
e.printStackTrace();
-
}
-
}
-
});
-
} catch (XMPPException e) {
-
e.printStackTrace();
-
}
-
}
-
}).start();
- }
activity_main.xml
-
<RelativeLayout xmlns:android=""
-
xmlns:tools="" android:layout_width="match_parent"
-
android:layout_height="match_parent">
-
<LinearLayout
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:id="@+id/linearLayout">
-
<TextView
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="发送:"
-
android:textSize="25sp"
-
android:id="@+id/textView"
-
android:layout_alignParentTop="true"
-
android:layout_alignParentLeft="true"
-
android:layout_alignParentStart="true" />
-
-
<EditText
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:id="@+id/editText"
-
android:textSize="25sp"/>
-
</LinearLayout>
-
-
<Button
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="发送"
-
android:id="@+id/button"
-
android:layout_below="@+id/linearLayout"
-
android:layout_centerHorizontal="true" />
-
-
<LinearLayout
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:layout_below="@+id/button">
-
-
<TextView
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:text="接收:"
-
android:textSize="25sp"
-
android:id="@+id/textView2"
-
android:layout_below="@+id/button"
-
-
/>
-
-
<EditText
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:id="@+id/editText2"
-
android:layout_weight="1" />
-
-
-
</LinearLayout>
-
-
- </RelativeLayout>