废话不说了。
在登陆以后应该建立一个监听消息的监听器,用来监听收到的消息:
这里收到消息后,通过广播将消息发送到需要的地方,比如聊天的activity,当然不一定用广播,
- private Handler handler = new Handler(){
- public void handleMessage(android.os.Message m) {
- Message msg=new Message();
- msg=(Message) m.obj;
- //把从服务器获得的消息通过广播发送
- Intent intent = new Intent("org.yhn.mes");
- String[] message=new String[]{
- msg.getFrom(),
- msg.getBody()};
- intent.putExtra("message", message);
- MainActivity.this.sendBroadcast(intent);
- };
- };
- /** message listener*/
- class MyChatManagerListener implements ChatManagerListener {
- public void chatCreated(Chat chat, boolean arg1) {
- chat.addMessageListener(new MessageListener(){
- public void processMessage(Chat arg0, Message msg) {
- /**通过handler转发消息*/
- android.os.Message m=handler.obtainMessage();
- m.obj=msg;
- m.sendToTarget();
- }
- });
- }
这样就可以收到消息了,可以再openfire服务器端,给所有在线的用户发送一个消息,测试下,这里就不贴图了,
smack中有chat和ChatManager类,可以方便的创建和管理会话,
比如在打开一个好友的聊天窗口时,创建一个和该好友通信的chat
- public class ChatActivity extends Activity {
- String account;
- String chatNick;
- public static String chatContents;
- TextView chatTextView;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.activity_chat);
- /** 设置top面板信息*/
- chatNick=getIntent().getStringExtra("nick");
- account=getIntent().getStringExtra("account");
- TextView nick_tv=(TextView) findViewById(R.id.chat_top_nick);
- nick_tv.setText(chatNick);
- Button send_btn=(Button) findViewById(R.id.chat_btn_send);
- send_btn.setOnClickListener(new OnClickListener(){
- public void onClick(View arg0) {
- EditText input=(EditText) findViewById(R.id.chat_input);
- String content=input.getText().toString();
- try {
- ChatManager cm = ConnUtil.getConnection().getChatManager();
- Chat chat=cm.createChat(account, new MessageListener(){
- public void processMessage(Chat arg0, Message msg) {
- Log.i("---", msg.getFrom()+"说:"+msg.getBody());
- //添加消息到聊天窗口
- }
- });
- Message m=new Message();
- m.setBody(content);
- chat.sendMessage(m);
- } catch (XMPPException e) {
- e.printStackTrace();
- }
- }
- });
- }
- }
在上边的代码中通过
- Message m=new Message();
- m.setBody(content);
- chat.sendMessage(m);
有了chat做什么都方便啦
测试可以用spark,
下面看效果图:
PS:图片显示不完整可在新窗口中查看,或者调整博客配置,嘿嘿。