基于openfire+smack开发Android即时聊天应用[二]-账号信息、添加好友、JID理解等
来源:互联网 发布:云烟淘宝客鹊桥助手 编辑:程序博客网 时间:2024/05/16 12:00
基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
- 1、 获取账号的所有额外属性信息
/** * 获取账号的全部信息 */private void getAccountAttributes() { try { Set<String> accountAttributes = AccountManager.getInstance(mConnection).getAccountAttributes(); Iterator<String> iterator = accountAttributes.iterator(); while(iterator.hasNext()){ String trim = iterator.next().toString().trim(); Log.e("Account", "获取账号信息成功===" + trim); } } catch (SmackException.NoResponseException e) { e.printStackTrace(); Log.e("Account", "连接服务器失败"); } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); Log.e("Account", "该账户已存在"); } catch (SmackException.NotConnectedException e) { e.printStackTrace(); Log.e("Account", "服务器连接失败"); }}
上述几个属性中的name属性即为用户的昵称属性,另外用户账号名、密码是不在这些属性当中的,账号名可以理解为是JID,可以通过RosterEntry.getUser这个方法获取,关于JID的理解请看下面的介绍
- 2、 获取当前登录用户的所有好友信息
/** * 获取当前登录用户的所有好友信息 */private void getAllFriend() { if (!mConnection.isConnected()) { return; } Set<RosterEntry> set = Roster.getInstanceFor(mConnection).getEntries(); Iterator<RosterEntry> iterator = set.iterator(); while (iterator.hasNext()) { String st = iterator.next().toString(); Log.e("getAllFriend", "获取当前登录用户的所有好友信息===" + st); }}
- 3、 获取账户昵称
/** * 获取账户昵称 * * @return */public void getAccountName() { if (mConnection.isConnected()) { try { String name = AccountManager.getInstance(mConnection).getAccountAttribute("username"); Log.e("getFriend", "获取账户昵称===" + name); } catch (Exception e) { Log.e("getFriend", "获取账户昵称失败"); } VCard vCard = new VCard(); String firstName = vCard.getFirstName(); Log.e("getFriend", "firstName==" + firstName); }}
- 4、 获取指定账号的好友信息 方法有问题
- 格式 [user”@”]domain[“/”resource]
domain:服务器域名; user:用户名; resource:属于用户的位置或设备,比如是手机还是电脑
一个用户可以同时以多种资源与统一个XMPP服务器连接,完整的JID例子:zhangsan@gmail.com/iphone6s
/** * 获取指定账号的好友信息 有问题 * * @param username */private void getFriend(String username) { if (!mConnection.isConnected()) { return; } RosterEntry entry = Roster.getInstanceFor(mConnection).getEntry(username+"@"+mConnection.getServiceName()); Log.e("getFriend", "域名===" + mConnection.getServiceName()); String s = entry.toString(); Log.e("getFriend", "获取指定账号的好友信息===" + s);}
- 5、 添加好友,可根据账号,昵称,组名
/** * 添加好友,可根据账号,昵称,组名 */private void addFriend(String user) { if (mConnection.isConnected()) { try { Roster.getInstanceFor(mConnection).createEntry(user, null, null); Log.e("addFriend", "添加好友成功" + user); } catch (SmackException.NotLoggedInException e) { e.printStackTrace(); Log.e("addFriend", "NotLoggedInException" + e); } catch (SmackException.NoResponseException e) { e.printStackTrace(); Log.e("addFriend", "NoResponseException" + e); } catch (XMPPException.XMPPErrorException e) { e.printStackTrace(); Log.e("addFriend", "XMPPErrorException" + e); } catch (SmackException.NotConnectedException e) { e.printStackTrace(); Log.e("addFriend", "NotConnectedException" + e); } }}
- 6、 关于对JID的理解
我对JID的理解主要是根据我在基于smack开发即时通信聊天应用时遇到的几种情况做的一个归纳,我碰到的JID的介绍主要有三种:
每个用户的好友列表中有一个JID,这个可以根据Openfire后台管理系统可以看出来,如下图:Smack_JID上面图中可以清晰的看到每个好友都对应有一个JID,而在我通过addFriend(String user, String nickName, String groupName)这个方法添加好友的时候,参数用户账号user最终就变成了上面的JID,是没有包含@符号和后面的服务器名的,我称这种JID为好友JID,如管理员账号的JID为:admin。这个JID通过官方提供的接口RosterEntry.getUser是可以获取到的。
好友之间聊天时有一个JID,在我创建聊天窗口对象Chat时(怎么创建请看我下一篇文章),所传的参数也是JID,但是这个JID和上面的JID的值却又不是一样的,不然会创建失败,我们来看看官方API:
官方API中很明显的指出了参数为JID,但是我如果真的出好友列表中的JID的话创建聊天对象失败,必须这样传好友JID@ServiceName ,这是第二种JID,我称为聊天JID,比如和管理员聊天时的JID为:admin@192.168.0.108
好友之间传输文件时又有一个JID,在创建文件传输对象时也需要传递一个参数为JID,我们也来看看官方API
官方API中也显示了在获取文件传输对象时需要传递参数为JID,但是这个JID我给的是聊天JID的时候,根本创建不了文件传输对象,后来在网上查了半天,看到别人都在后面加了个Smack,我也试了下,结果竟然成功了,坑爹啊,反正我还没搞清楚这是为什么,格式是这样的:好友JID@ServiceNam/Smack,我称这种JID为文件传输JID,比如聊天时给管理员传文件时的JID为:admin@192.168.0.108/Smack
- 基于openfire+smack开发Android即时聊天应用[二]-账号信息、添加好友、JID理解等
- 基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
- 基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
- 基于openfire+smack开发Android即时聊天应用[二]-用户注册、登陆、修改密码、注销等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[三]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
- 基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- 基于openfire+smack开发Android即时聊天应用[一]-用户注册、登陆、修改密码、注销等
- 基于openfire+smack开发Android即时聊天应用[一]---openfire安装部署
- #征文再续#Android基于XMPP Smack Openfire开发IM即时聊天(二)
- 基于openfire+smack开发Android即时聊天应用[五]-简易IM客户端效果图
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- Android基于XMPP Smack openfire 开发的聊天室(二) 【聊天信息、成员】
- html表单和超链接的使用
- linux head
- IIC设备驱动程序(十三)————实例解析linux内核I2C体系结构(2)
- BZOJ1688 疾病管理
- 第十三周(Dungeon Game)
- 基于openfire+smack开发Android即时聊天应用[二]-账号信息、添加好友、JID理解等
- redis批量上传数据(pipeline
- jquery插件学习
- 洛谷p1821 spfa
- JAVA利用FreeMarker生成(导出)Excel表格
- 如何对热词进行提取
- 基于openfire+smack开发Android即时聊天应用[三]-单人聊天、群聊、发送接收文件等
- MySQL数据库(27)
- 第二十三课 认识内核对象_遍历内核对象_名字_地址