Gtalk基本功能完成
上传源代码,供大家参考!
ContactsActivity(Gtalk好友列表)
import com.google.android.gtalkservice.IGTalkService;
import com.google.android.gtalkservice.IGTalkSession;
import com.google.android.gtalkservice.Presence;
import android.view.View;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.DeadObjectException;
import android.os.IBinder;
import android.provider.Im;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class GtalkActivity extends Activity implements View.OnClickListener {
private EditText login_User = null;
private EditText login_Pwd = null;
private IGTalkSession mGtalkSession = null;
private Button Btn_Login = null;
private Button Btn_Exit = null;
private static final int contactsActivity = 0;
public static IGTalkService xmppservice;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
//EditText: account,password
login_User = (EditText)this.findViewById(R.id.login_et_user);
login_Pwd = (EditText)this.findViewById(R.id.login_et_pwd);
//Button: login,exit
Btn_Login = (Button)this.findViewById(R.id.btn_login);
Btn_Exit = (Button)this.findViewById(R.id.btn_exit);
Btn_Login.setOnClickListener(this);
Btn_Exit.setOnClickListener(this);
}
//display message on screen
private void logMessage(CharSequence msg) {
Toast.makeText(GtalkActivity.this,msg,
Toast.LENGTH_SHORT).show();
}
//service connection
private ServiceConnection mConnection = new ServiceConnection(){
public void onServiceConnected(ComponentName className, IBinder service) {
xmppservice = IGTalkService.Stub.asInterface(service);
try {
//enter account,password
mGtalkSession = xmppservice.createGTalkSession(login_User.getText().toString(),login_Pwd.getText().toString());
mGtalkSession.requestRoster();
if(mGtalkSession == null){
logMessage(getText(R.string.xmpp_session_not_found));
return;
}
if(mGtalkSession != null){
boolean b = false;
try {
b = mGtalkSession.isConnected();
} catch (DeadObjectException ex) {
logMessage("***Check Current State meets Error! Exception->" + ex);
}
if(b){
//connection state
switch(mGtalkSession.getConnectionState()){
case 4: // login successfully
logMessage("successfully logged in to the XMPP server!");
break;
case 5:
mGtalkSession.setPresence(new Presence(Im.PresenceColumns.AVAILABLE, "Am here now!"));
createContact();
logMessage("the client requested roster from the server.");
break;
case 0: // network problem
logMessage("***ConnectionState.IDLE -> not connected!");
break;
case 2: // connecting....
logMessage("connecting to the server.");
break;
case 3:
logMessage("connected to the server, but not authenticated yet.");
break;
case 1:
logMessage("in a pending state for automatic reconnection.");
break;
default:
logMessage("Unknown ConnectionState!");
break;
}
}
}
} catch (DeadObjectException e) {
e.printStackTrace();
}
}
//service disconnected
public void onServiceDisconnected(ComponentName componentname) {
xmppservice = null;
}
};
//tow buttons bindservic/eunbindservice
public void onClick(View view) {
if(view == Btn_Login){
bindService((new Intent()).setComponent(com.google.android.gtalkservice.GTalkServiceConstants.GTALK_SERVICE_COMPONENT),
mConnection,Context.BIND_AUTO_CREATE);
}
if(view == Btn_Exit){
unbindService(mConnection);
xmppservice = null;
logMessage("ServiceDisconnected");
}
}
private void createContact() {
Intent contact = new Intent(this,ContactsActivity.class);
startSubActivity(contact, contactsActivity);
}
protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) {
super.onActivityResult(requestCode, resultCode, data, extras);
switch(requestCode) {
case contactsActivity:
break;
}
}
}
MessageSender (发消息)
import com.google.android.gtalkservice.IChatSession;
import com.google.android.gtalkservice.IGTalkService;
import com.google.android.gtalkservice.IGTalkSession;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.os.DeadObjectException;
import android.provider.Im;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;
public class MessageSender extends Activity implements View.OnClickListener {
private EditText senderEdit = null;
private ListView mesgList = null;
private Button sendButn = null;
private TextView recevieView = null;
IGTalkSession mXmppSession = null;
IGTalkService xmppService;
private String user = null;
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.message);
recevieView = (TextView)this.findViewById(R.id.recipient);
senderEdit = (EditText)this.findViewById(R.id.sendText);
mesgList = (ListView)this.findViewById(R.id.listMessages);
sendButn = (Button)this.findViewById(R.id.send);
sendButn.setOnClickListener(this);
Bundle extras = getIntent().getExtras();
if (extras != null) {
user = extras.getString(ContactsActivity.KEY_Name);
// logMessage("***********user************"+user);
if(user != null){
recevieView.setText(user);
Cursor cursor = managedQuery(Im.Messages.CONTENT_URI, null,
null, null, null);
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor,
new String[]{Im.MessagesColumns.BODY},
new int[]{android.R.id.text1});
this.mesgList.setAdapter(adapter);
}
}
}
private void logMessage(CharSequence msg) {
Toast.makeText(MessageSender.this, msg,
Toast.LENGTH_SHORT).show();
}
public void onClick(View view) {
if(view == sendButn ){
try{
xmppService = GtalkActivity.xmppservice;
if(xmppService == null){
logMessage("xmppService is null");
}
try {
mXmppSession = xmppService.getDefaultSession();
} catch (DeadObjectException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(mXmppSession == null){
logMessage("mXmppSession is null");
return;
}
IChatSession ichatsession = mXmppSession.createChatSession(user);
if(ichatsession == null)
{
logMessage("Fail to create chat session. Return.");
return;
}
ichatsession.sendTextMessage(senderEdit.getText().toString());
} catch (DeadObjectException e) {
e.printStackTrace();
}
}
}
}
AndroidGtalk.rar (59.1 KB)
分享到:
相关推荐
通过以上步骤,可以有效地完成Openfire服务器和Spark客户端的安装配置,实现基本的即时通讯功能,并能够进一步扩展高级功能和服务。这份手册为用户提供了全面的技术指导和支持,使得即使是缺乏技术背景的SMB用户也...
XMPP不仅用于传统的个人IM应用,如QQ、MSN Messenger和Gtalk(Gtalk是XMPP协议的实现),还可在企业环境中提升沟通效率,甚至在游戏中集成通信功能,增强用户体验。 Spark是一款基于XMPP的Java即时通讯客户端,它...
- Eclipse安装完成后,需要配置相关开发工具来支持Android开发。 ### 第三章:下载和安装Android SDK - Android SDK是开发Android应用所需的软件开发工具包,包含编译器、调试器和必要的API库。 - SDK的下载和安装...
- Gtalk:集成Google Talk聊天服务,实现即时通讯功能。 #### 五、总结 本书旨在为初学者提供全面的Android开发指南,从基础知识到高级主题均有涉及。通过实践案例加深对各个知识点的理解,帮助读者快速掌握...
- **使用Google API的Gtalk**:Gtalk是Google的一款即时通讯软件,在Android中也可以通过API调用来实现聊天功能。 - **实现聊天功能**:利用XMPP协议实现消息收发。 - **应用程序:找一个朋友**:通过SQLite数据库...
综上所述,XMPP协议和Smack库为开发实时通信应用提供了强大的工具,通过理解这些基本概念和实践,开发者能够构建出高效、稳定的IM系统。在实际项目中,结合其他相关的服务和工具,如Openfire和Spark,可以进一步提升...
### Openfire + Spark 安装及配置指南 #### 第一章 Java领域的IM解决方案 在Java领域内,一种常用的即时通信(IM)解决...这套方案不仅适用于企业内部通信,还可以扩展支持更多的外部即时通信服务,如MSN、GTalk等。
介绍了如何利用Google提供的API实现即时通讯功能,重点在于Gtalk服务的集成与使用方法。 #### 6. 第十一章:应用程序 —— 找一个朋友 这一章节通过实例演示了如何开发一个寻找附近好友的应用程序,包括网络通信、...
通过集成Google Talk(GTalk)功能,可以让应用具备即时通讯能力,从而增强其社交属性。 **9.2 编译和运行Google API** 本节将介绍如何在Android应用中使用Google API,并完成编译和运行的过程。 #### 十、应用程序...
Android系统内置了GTalk服务,开发者可以通过Google提供的API实现即时通讯功能。同时,Android提供了HttpURLConnection、Volley、Retrofit等网络通信库,方便开发者实现网络数据的获取和发送。 九、SQLite数据库 ...
在搜索新功能的界面中,选择“New local Site...”,指定ADT插件的本地目录,完成安装后配置ADT。 #### 2. 创建与运行Android项目 - **使用ADT创建新项目**:通过“File>New>Project>Android>Android Project”...
53. **gtalkservice**: GTALK服务 - 提供GTALK即时通讯功能。 54. **HTMLViewer**: HTML查看器 - 支持查看HTML格式的文档。 55. **hidialer.apk**: 智能拨号 - 提供智能搜索和快速拨号功能。 56. **himarket.apk*...
通过对这些代码的学习,开发者可以了解到如何有效地利用XMPP API完成即时通信应用的核心功能。 ##### 2.3 实践建议 - **熟悉XML格式**:由于XMPP是基于XML的数据交换协议,因此熟悉XML的基本语法对于理解XMPP的...