Android基於XMPP Smack Openfire開發IM(5)傳送訊息
這節到重點了,看看傳送訊息的實現,程式碼寫的很簡單,主要為了演示功能的實現,
廢話不說了。
在登陸以後應該建立一個監聽訊息的監聽器,用來監聽收到的訊息:
這裡收到訊息後,通過廣播將訊息傳送到需要的地方,比如聊天的activity,當然不一定用廣播,
[java]view plaincopy
privateHandlerhandler=newHandler(){
publicvoidhandleMessage(android.os.Messagem){
Messagemsg=newMessage();
msg=(Message)m.obj;
//把從伺服器獲得的訊息通過廣播發送
Intentintent=newIntent("org.yhn.mes");
String[]message=newString[]{
msg.getFrom(),
msg.getBody()};
intent.putExtra("message",message);
MainActivity.this.sendBroadcast(intent);
};
};
/**messagelistener*/
classMyChatManagerListenerimplementsChatManagerListener{
public
chat.addMessageListener(newMessageListener(){
publicvoidprocessMessage(Chatarg0,Messagemsg){
/**通過handler轉發訊息*/
android.os.Messagem=handler.obtainMessage();
m.obj=msg;
m.sendToTarget();
}
});
}
這樣就可以收到訊息了,可以再openfire伺服器端,給所有線上的使用者傳送一個訊息,測試下,這裡就不貼圖了,
smack中有chat和ChatManager類,可以方便的建立和管理會話,
比如在開啟一個好友的聊天視窗時,建立一個和該好友通訊的chat
[java]view plaincopy
publicclassChatActivityextendsActivity{
Stringaccount;
StringchatNick;
publicstaticStringchatContents;
TextViewchatTextView;
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_chat);
/**設定top面板資訊*/
chatNick=getIntent().getStringExtra("nick");
account=getIntent().getStringExtra("account");
TextViewnick_tv=(TextView)findViewById(R.id.chat_top_nick);
nick_tv.setText(chatNick);
Buttonsend_btn=(Button)findViewById(R.id.chat_btn_send);
send_btn.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewarg0){
EditTextinput=(EditText)findViewById(R.id.chat_input);
Stringcontent=input.getText().toString();
try{
ChatManagercm=ConnUtil.getConnection().getChatManager();
Chatchat=cm.createChat(account,newMessageListener(){
publicvoidprocessMessage(Chatarg0,Messagemsg){
Log.i("---",msg.getFrom()+"說:"+msg.getBody());
//新增訊息到聊天視窗
}
});
Messagem=newMessage();
m.setBody(content);
chat.sendMessage(m);
}catch(XMPPExceptione){
e.printStackTrace();
}
}
});
}
}
在上邊的程式碼中通過
[java]view plaincopy
Messagem=newMessage();
m.setBody(content);
chat.sendMessage(m);
傳送訊息,
有了chat做什麼都方便啦
測試可以用spark,
下面看效果圖:
PS:圖片顯示不完整可在新視窗中檢視,或者調整部落格配置,嘿嘿。
轉載於:https://my.oschina.net/bv10000/blog/187569