日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 通过 XMPP 实现聊天功能,App Engine Assisted Group Chat (开源)

發布時間:2025/4/14 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 通过 XMPP 实现聊天功能,App Engine Assisted Group Chat (开源) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Ureca終于把主要的功能給解決了,不管怎樣,明天去見Prof. ,不管他同不同意,我都不會再做下去了。真心比較忙最近,而且哈,忙的話,真的很多事情都沒法盡善盡美地完成,這不是我的風格,另外剩下主要準備實習了,加油加油。

這個project主要是想實現一個一邊看視頻,一邊在線聊天的App,真的好老土,不過對于我這種新手能做出來已經很不錯了。下邊講的就是如何利用XMPP登錄gtalk以實現聊天的功能,真心投入很多。標題的后半部分是想表達如果利用App Engine來實現轉發的功能,并且通過這個特性,實現聊天室的組建,當然這是個比較虛的“聊天室”。沒服務器呀,只要免費用google的了。下邊是用兩個模擬器展示出來的效果圖:

?

?

XMPP的功能主要就是通過一下兩個文件實現的,當然都有refer別人的東西。SettingDialog就是得先連接好gtalk的服務器,然后在XMPP里邊發送和接受消息,需要用到smack,自行google哈。

?

SettingDialog.java

package app.tabsample;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Presence;

import android.app.Dialog;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
* Gather the xmpp settings and create an XMPPConnection
*/
public class SettingsDialog extends Dialog implements android.view.View.OnClickListener {
private XMPPClient xmppClient;

public SettingsDialog(XMPPClient xmppClient) {
super(xmppClient);
this.xmppClient = xmppClient;
}

protected void onStart() {
super.onStart();
setContentView(R.layout.settings);
getWindow().setFlags(4, 4);
setTitle("XMPP Settings");
Button ok = (Button) findViewById(R.id.ok);
ok.setOnClickListener(this);
}

public void onClick(View v) {
String host = "talk.google.com";
String port = "5222";
String service = "google.com";
String username = getText(R.id.userid);
String password = getText(R.id.password);

// Create a connection
ConnectionConfiguration connConfig =
new ConnectionConfiguration(host, Integer.parseInt(port), service);
XMPPConnection connection = new XMPPConnection(connConfig);

try {
connection.connect();
Log.i("XMPPClient", "[SettingsDialog] Connected to " + connection.getHost());
} catch (XMPPException ex) {
Log.e("XMPPClient", "[SettingsDialog] Failed to connect to " + connection.getHost());
Log.e("XMPPClient", ex.toString());
xmppClient.setConnection(null);
}
try {
connection.login(username, password);
Log.i("XMPPClient", "Logged in as " + connection.getUser());

// Set the status to available
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
xmppClient.setConnection(connection);

//Send initial messages to the server
String t = Temp.getID();
String to = "wihoho@appspot.com";
Log.i("XMPPClient", "Sending text [" + t + "] to [" + to + "]");
Message msg = new Message(to, Message.Type.chat);
msg.setSubject("VideoID");
msg.setBody("i"+t); // i is used to indicate this message as sending video ID
connection.sendPacket(msg);

} catch (XMPPException ex) {
Log.e("XMPPClient", "[SettingsDialog] Failed to log in as " + username);
Log.e("XMPPClient", ex.toString());
xmppClient.setConnection(null);
}
dismiss();
}

private String getText(int id) {
EditText widget = (EditText) this.findViewById(id);
return widget.getText().toString();
}
}



XMPPClient.java

package app.tabsample;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.util.StringUtils;

import java.util.ArrayList;

public class XMPPClient extends Activity {

private ArrayList<String> messages = new ArrayList<String>();
private Handler mHandler = new Handler();
private SettingsDialog mDialog;
//private EditText mRecipient;
private EditText mSendText;
private ListView mList;
private XMPPConnection connection;

/**
* Called with the activity is first created.
*/
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
Log.i("XMPPClient", "onCreate called");
setContentView(R.layout.chatting);

//mRecipient = (EditText) this.findViewById(R.id.recipient);
//Log.i("XMPPClient", "mRecipient = " + mRecipient);
mSendText = (EditText) this.findViewById(R.id.sendText);
Log.i("XMPPClient", "mSendText = " + mSendText);
mList = (ListView) this.findViewById(R.id.listMessages);
Log.i("XMPPClient", "mList = " + mList);
setListAdapter();

// Dialog for getting the xmpp settings
mDialog = new SettingsDialog(this);

//Sending the Video ID to the app engine
// Temp app = (Temp)getApplicationContext();
// String t = app.getID();
// String to = "gongli.huge@gmail.com";
// Log.i("XMPPClient", "Sending text [" + t + "] to [" + to + "]");
// Message msg = new Message(to, Message.Type.chat);
// msg.setBody(t);
// connection.sendPacket(msg);
//End of updating the chatting room

// Set a listener to show the settings dialog
Button setup = (Button) this.findViewById(R.id.setup);
setup.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mHandler.post(new Runnable() {
public void run() {
mDialog.show();
//........................Send the current video Id to the app engine
// String t = Temp.getID();
// String to = "gongli.huge@gmail.com";
// Log.i("XMPPClient", "Sending text [" + t + "] to [" + to + "]");
// Message msg = new Message(to, Message.Type.chat);
// msg.setBody(t);
// connection.sendPacket(msg);
//........................End
}
});
}
});

// Set a listener to send a chat text message
Button send = (Button) this.findViewById(R.id.send);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//String to = mRecipient.getText().toString();
String to = "wihoho@appspot.com";
String text = mSendText.getText().toString();

Log.i("XMPPClient", "Sending text [" + text + "] to [" + to + "]");
Message msg = new Message(to, Message.Type.chat);
msg.setSubject("chat");
msg.setBody("c"+text); //c is used to indicate this message is chatting txt
connection.sendPacket(msg);
//messages.add(connection.getUser() + ":");
//messages.add(text);
setListAdapter();
}
});
}

/**
* Called by Settings dialog when a connection is establised with the XMPP server
*
* @param connection
*/
public void setConnection
(XMPPConnection
connection) {
this.connection = connection;
if (connection != null) {
// Add a packet listener to get messages sent to us
PacketFilter filter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message.getFrom());
Log.i("XMPPClient", "Got text [" + message.getBody() + "] from [" + fromName + "]");
//messages.add(fromName + ":");
messages.add(message.getBody());
// Add the incoming message to the list view
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
}
});
}
}
}, filter);
}
}

private void setListAdapter() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.multi_line_list_item,
messages);
mList.setAdapter(adapter);
}
}

?

接下來的是App Engine這端的代碼:


chattingServiceServlet.java

package com.chat;

import java.io.IOException;
import java.util.LinkedList;
import java.util.logging.Logger;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.xmpp.JID;
import com.google.appengine.api.xmpp.Message;
import com.google.appengine.api.xmpp.MessageBuilder;
import com.google.appengine.api.xmpp.XMPPService;
import com.google.appengine.api.xmpp.XMPPServiceFactory;

@SuppressWarnings("serial")
public class ChattingServiceServlet extends HttpServlet {
private static final Logger LOG = Logger.getLogger(ChattingServiceServlet.class.getName());
private LinkedList<User> users = new LinkedList<User>();

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {

// Parse incoming message
XMPPService xmpp = XMPPServiceFactory.getXMPPService();
Message msg = xmpp.parseMessage(req);
JID jid = msg.getFromJid();
String body = msg.getBody();

// Analyze the received message

//Send the video ID
if(body.charAt(0) == 'i'){
LOG.info(jid.getId() + ": " + body);
int m;
for(m = 0; m < users.size(); m ++){
if(users.get(m).user.toString().equals(getRealID(jid).toString()))
break;
}

//if found
if(m < users.size())
users.get(m).videoID = body.substring(1);
//if not found
else{
users.add(new User(getRealID(jid) ,body.substring(1)));
}

//indicate that the user has entered the chat room
String response = "You have entered chatting room: "+body.substring(1)+"\nThe below users are in the same chatting room with you ";
msg = new MessageBuilder().withRecipientJids(jid).withBody(response).build();
xmpp.sendMessage(msg);

//Used to print out the current users

for(int n = 0 ; n < users.size(); n++){
if(users.get(n).videoID.equals(body.substring(1))){
String userinfo = users.get(n).user.toString();
msg = new MessageBuilder().withRecipientJids(jid).withBody(userinfo).build();
xmpp.sendMessage(msg);
}
}
}

//Send text
else if(body.charAt(0) == 'c'){
LOG.info(jid.getId() + ": " + body);
//Find the video ID of the current user
int index;
for(index = 0; index < users.size(); index ++){
if(users.get(index).user.toString().equals(getRealID(jid).toString()))
break;
}
//Find the users with the same vdieo ID
if(index < users.size()){
LinkedList<JID> jids = getJIDsID(users.get(index).videoID);
String response = jid.toString()+": "+body.substring(1);

for(int n = 0 ; n < jids.size(); n++){
msg = new MessageBuilder().withRecipientJids(jids.get(n)).withBody(response).build();
xmpp.sendMessage(msg);
}
}
}
}


public JID getRealID(JID receiveID){
StringBuffer sb = new StringBuffer();
int i = 5;

while(receiveID.toString().charAt(i) != '/'){
sb.append(receiveID.toString().charAt(i));
i++;
assert i < receiveID.toString().length();
}

return new JID(sb.toString().trim());
}

public LinkedList<JID> getJIDsID(String video){
LinkedList<JID> jids = new LinkedList<JID>();
for(int i= 0; i < users.size();i++){
if(users.get(i).videoID.equals(video))
jids.add(users.get(i).user);
}
return jids;
}

public LinkedList<String> getVideoIDs(){
LinkedList<String> ids = new LinkedList<String>();
for(int i = 0; i < users.size(); i ++){
if(!ids.contains(users.get(i).videoID))
ids.add(users.get(i).videoID);
}
return ids;
}
}

?


下載鏈接:https://github.com/wihoho/AndroidXMPP

原文:http://www.cnblogs.com/wihoho/archive/2012/03/27/2420157.html

轉載于:https://www.cnblogs.com/mypzx/archive/2013/02/28/2936468.html

總結

以上是生活随笔為你收集整理的Android 通过 XMPP 实现聊天功能,App Engine Assisted Group Chat (开源)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文在线√天堂 | 超碰caoporen | 日韩在线免费播放 | 国产精品天天狠天天看 | 老子影院午夜伦不卡大全 | 我不卡av | 精品在线第一页 | 污站在线观看 | 91在线无精精品白丝 | 污污视频在线免费观看 | 欧美午夜精品一区二区三区电影 | 久久一区欧美 | 女人18毛片水真多18精品 | 久久美 | 欧美激情在线观看一区 | 五月天欧美 | 精品人妻aV中文字幕乱码色欲 | 香港三级日本三级韩国三级 | 中文字幕有码无码人妻av蜜桃 | 日韩www. | 日韩porn | 精品综合久久久 | 色播五月激情 | 911亚洲精品 | 97小视频| 国产精品尤物视频 | 久久综合伊人77777麻豆最新章节 | 伊人在线 | 日本三级午夜理伦三级三 | 国产鲁鲁视频在线观看免费 | 激情五月亚洲 | 久久精品午夜福利 | av大全免费 | 久久久久亚洲国产 | 欧美精品一区二区在线播放 | 久久久a级片 | 精品少妇一二三区 | 亚洲国产成人精品激情在线 | 亚洲综合二区 | 男人捅爽女人 | 韩国女主播一区 | 中文字幕一区二区三区四区欧美 | 国产九色91回来了 | 日本成人激情视频 | 国产精品免费视频一区二区 | 国产高清视频一区二区 | 就爱操av | 五月天婷婷在线视频 | 调教女m荡骚贱淫故事 | 久久精品视频一区二区三区 | 欧洲中文字幕 | 99色在线视频 | 久久免费一区 | 九九这里只有精品视频 | 中文字幕av一区二区三区 | 尤物av在线 | 91黄色免费看 | 国产午夜视频在线播放 | 亚洲日本天堂 | 美女被男生免费视频 | 国产精品久久久久久妇女6080 | av官网在线 | 日本不卡一区在线 | 免费大片黄在线观看视频网站 | 国产免费av网 | 夜夜爽影院| 亚洲欧美精品久久 | 国产suv一区二区 | 亚洲国产黄色 | 亚洲成av人片在线观看无码 | 亚洲精品在线91 | 国产精品无 | 五月婷av| 欧美日韩一区二区电影 | 在线一本 | 久久91| 一个色综合久久 | 久草热在线观看 | 国产精品99精品无码视亚 | 亚洲三级在线看 | 欧美在线视频一区二区 | 91高清视频在线 | 影音先锋男人天堂 | 国产91久| 日本一区二区三区视频免费看 | 日本一本在线 | 在线视频中文 | 成人爽a毛片一区二区 | 最新天堂中文在线 | 欧美做爰性生交视频 | 国产又大又粗又硬 | 欧美日韩亚洲激情 | 欧美午夜精品一区二区 | 午夜小视频在线播放 | 少妇脱了内裤让我添 | 国产12页 | 婷婷伊人综合中文字幕 | 亚洲爆乳无码精品aaa片蜜桃 | 天天干天天操天天拍 |