zoukankan      html  css  js  c++  java
  • openfire Android学习(六)----总结

    Xmpp的一些方法整理到一个工具类中了

    XmppConnection.java

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1.   
    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. import java.io.BufferedInputStream;  
    2. import java.io.BufferedReader;  
    3. import java.io.ByteArrayInputStream;  
    4. import java.io.File;  
    5. import java.io.FileInputStream;  
    6. import java.io.IOException;  
    7. import java.io.InputStreamReader;  
    8. import java.net.URL;  
    9. import java.net.URLConnection;  
    10. import java.util.ArrayList;  
    11. import java.util.Collection;  
    12. import java.util.HashMap;  
    13. import java.util.Iterator;  
    14. import java.util.List;  
    15. import java.util.Map;  
    16.   
    17. import org.jivesoftware.smack.ConnectionConfiguration;  
    18. import org.jivesoftware.smack.PacketCollector;  
    19. import org.jivesoftware.smack.Roster;  
    20. import org.jivesoftware.smack.RosterEntry;  
    21. import org.jivesoftware.smack.RosterGroup;  
    22. import org.jivesoftware.smack.SmackConfiguration;  
    23. import org.jivesoftware.smack.XMPPConnection;  
    24. import org.jivesoftware.smack.XMPPException;  
    25. import org.jivesoftware.smack.filter.AndFilter;  
    26. import org.jivesoftware.smack.filter.PacketFilter;  
    27. import org.jivesoftware.smack.filter.PacketIDFilter;  
    28. import org.jivesoftware.smack.filter.PacketTypeFilter;  
    29. import org.jivesoftware.smack.packet.IQ;  
    30. import org.jivesoftware.smack.packet.Message;  
    31. import org.jivesoftware.smack.packet.Packet;  
    32. import org.jivesoftware.smack.packet.Presence;  
    33. import org.jivesoftware.smack.packet.Registration;  
    34. import org.jivesoftware.smack.provider.PrivacyProvider;  
    35. import org.jivesoftware.smack.provider.ProviderManager;  
    36. import org.jivesoftware.smack.util.StringUtils;  
    37. import org.jivesoftware.smackx.Form;  
    38. import org.jivesoftware.smackx.FormField;  
    39. import org.jivesoftware.smackx.GroupChatInvitation;  
    40. import org.jivesoftware.smackx.OfflineMessageManager;  
    41. import org.jivesoftware.smackx.PrivateDataManager;  
    42. import org.jivesoftware.smackx.ReportedData;  
    43. import org.jivesoftware.smackx.ReportedData.Row;  
    44. import org.jivesoftware.smackx.ServiceDiscoveryManager;  
    45. import org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsProvider;  
    46. import org.jivesoftware.smackx.filetransfer.FileTransferManager;  
    47. import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer;  
    48. import org.jivesoftware.smackx.muc.DiscussionHistory;  
    49. import org.jivesoftware.smackx.muc.HostedRoom;  
    50. import org.jivesoftware.smackx.muc.MultiUserChat;  
    51. import org.jivesoftware.smackx.packet.ChatStateExtension;  
    52. import org.jivesoftware.smackx.packet.LastActivity;  
    53. import org.jivesoftware.smackx.packet.OfflineMessageInfo;  
    54. import org.jivesoftware.smackx.packet.OfflineMessageRequest;  
    55. import org.jivesoftware.smackx.packet.SharedGroupsInfo;  
    56. import org.jivesoftware.smackx.packet.VCard;  
    57. import org.jivesoftware.smackx.provider.AdHocCommandDataProvider;  
    58. import org.jivesoftware.smackx.provider.DataFormProvider;  
    59. import org.jivesoftware.smackx.provider.DelayInformationProvider;  
    60. import org.jivesoftware.smackx.provider.DiscoverInfoProvider;  
    61. import org.jivesoftware.smackx.provider.DiscoverItemsProvider;  
    62. import org.jivesoftware.smackx.provider.MUCAdminProvider;  
    63. import org.jivesoftware.smackx.provider.MUCOwnerProvider;  
    64. import org.jivesoftware.smackx.provider.MUCUserProvider;  
    65. import org.jivesoftware.smackx.provider.MessageEventProvider;  
    66. import org.jivesoftware.smackx.provider.MultipleAddressesProvider;  
    67. import org.jivesoftware.smackx.provider.RosterExchangeProvider;  
    68. import org.jivesoftware.smackx.provider.StreamInitiationProvider;  
    69. import org.jivesoftware.smackx.provider.VCardProvider;  
    70. import org.jivesoftware.smackx.provider.XHTMLExtensionProvider;  
    71. import org.jivesoftware.smackx.search.UserSearch;  
    72. import org.jivesoftware.smackx.search.UserSearchManager;  
    73.   
    74. import android.graphics.drawable.Drawable;  
    75. import android.util.Log;  
    76.   
    77. import com.techrare.listener.TaxiConnectionListener;  
    78. /** 
    79.  * XmppConnection 工具类 
    80.  * @author 肖赛SoAi 
    81.  * 
    82.  */  
    83. public class XmppConnection {  
    84.     private int SERVER_PORT = 5222;  
    85.     private String SERVER_HOST = "127.0.0.1";  
    86.     private XMPPConnection connection = null;  
    87.     private String SERVER_NAME = "ubuntuserver4java";  
    88.     private static XmppConnection xmppConnection = new XmppConnection();  
    89.     private TaxiConnectionListener connectionListener;  
    90.     /** 
    91.      * 单例模式 
    92.      *  
    93.      * @return 
    94.      */  
    95.     synchronized public static XmppConnection getInstance() {  
    96.         return xmppConnection;  
    97.     }  
    98.   
    99.     /** 
    100.      * 创建连接 
    101.      */  
    102.     public XMPPConnection getConnection() {  
    103.         if (connection == null) {  
    104.             openConnection();  
    105.         }  
    106.         return connection;  
    107.     }  
    108.   
    109.     /** 
    110.      * 打开连接 
    111.      */  
    112.     public boolean openConnection() {  
    113.         try {  
    114.             if (null == connection || !connection.isAuthenticated()) {  
    115.                 XMPPConnection.DEBUG_ENABLED = true;// 开启DEBUG模式  
    116.                 // 配置连接  
    117.                 ConnectionConfiguration config = new ConnectionConfiguration(  
    118.                         SERVER_HOST, SERVER_PORT, SERVER_NAME);  
    119.                 config.setReconnectionAllowed(true);  
    120.                 config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);  
    121.                 config.setSendPresence(true); // 状态设为离线,目的为了取离线消息  
    122.                 config.setSASLAuthenticationEnabled(false); // 是否启用安全验证  
    123.                 config.setTruststorePath("/system/etc/security/cacerts.bks");  
    124.                 config.setTruststorePassword("changeit");  
    125.                 config.setTruststoreType("bks");  
    126.                 connection = new XMPPConnection(config);  
    127.                 connection.connect();// 连接到服务器  
    128.                 // 配置各种Provider,如果不配置,则会无法解析数据  
    129.                 configureConnection(ProviderManager.getInstance());  
    130.                 return true;  
    131.             }  
    132.         } catch (XMPPException xe) {  
    133.             xe.printStackTrace();  
    134.             connection = null;  
    135.         }  
    136.         return false;  
    137.     }  
    138.   
    139.     /** 
    140.      * 关闭连接 
    141.      */  
    142.     public void closeConnection() {  
    143.         if(connection!=null){  
    144.             //移除連接監聽  
    145.             //connection.removeConnectionListener(connectionListener);  
    146.             if(connection.isConnected())  
    147.                 connection.disconnect();  
    148.             connection = null;  
    149.         }  
    150.         Log.i("XmppConnection""關閉連接");  
    151.     }  
    152.   
    153.     /** 
    154.      * 登录 
    155.      *  
    156.      * @param account 
    157.      *            登录帐号 
    158.      * @param password 
    159.      *            登录密码 
    160.      * @return 
    161.      */  
    162.     public boolean login(String account, String password) {  
    163.         try {  
    164.             if (getConnection() == null)  
    165.                 return false;  
    166.             getConnection().login(account, password);  
    167.             // 更改在綫狀態  
    168.             Presence presence = new Presence(Presence.Type.available);  
    169.             getConnection().sendPacket(presence);  
    170.             // 添加連接監聽  
    171.             connectionListener = new TaxiConnectionListener();  
    172.             getConnection().addConnectionListener(connectionListener);  
    173.             return true;  
    174.         } catch (XMPPException xe) {  
    175.             xe.printStackTrace();  
    176.         }  
    177.         return false;  
    178.     }  
    179.   
    180.     /** 
    181.      * 注册 
    182.      *  
    183.      * @param account 
    184.      *            注册帐号 
    185.      * @param password 
    186.      *            注册密码 
    187.      * @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败 
    188.      */  
    189.     public String regist(String account, String password) {  
    190.         if (getConnection() == null)  
    191.             return "0";  
    192.         Registration reg = new Registration();  
    193.         reg.setType(IQ.Type.SET);  
    194.         reg.setTo(getConnection().getServiceName());  
    195.         // 注意这里createAccount注册时,参数是UserName,不是jid,是"@"前面的部分。  
    196.         reg.setUsername(account);  
    197.         reg.setPassword(password);  
    198.         // 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!  
    199.         reg.addAttribute("android""geolo_createUser_android");  
    200.         PacketFilter filter = new AndFilter(new PacketIDFilter(  
    201.                 reg.getPacketID()), new PacketTypeFilter(IQ.class));  
    202.         PacketCollector collector = getConnection().createPacketCollector(  
    203.                 filter);  
    204.         getConnection().sendPacket(reg);  
    205.         IQ result = (IQ) collector.nextResult(SmackConfiguration  
    206.                 .getPacketReplyTimeout());  
    207.         // Stop queuing results停止请求results(是否成功的结果)  
    208.         collector.cancel();  
    209.         if (result == null) {  
    210.             Log.e("regist""No response from server.");  
    211.             return "0";  
    212.         } else if (result.getType() == IQ.Type.RESULT) {  
    213.             Log.v("regist""regist success.");  
    214.             return "1";  
    215.         } else { // if (result.getType() == IQ.Type.ERROR)  
    216.             if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {  
    217.                 Log.e("regist""IQ.Type.ERROR: "  
    218.                         + result.getError().toString());  
    219.                 return "2";  
    220.             } else {  
    221.                 Log.e("regist""IQ.Type.ERROR: "  
    222.                         + result.getError().toString());  
    223.                 return "3";  
    224.             }  
    225.         }  
    226.     }  
    227.   
    228.     /** 
    229.      * 更改用户状态 
    230.      */  
    231.     public void setPresence(int code) {  
    232.         XMPPConnection con = getConnection();  
    233.         if (con == null)  
    234.             return;  
    235.         Presence presence;  
    236.         switch (code) {  
    237.         case 0:  
    238.             presence = new Presence(Presence.Type.available);  
    239.             con.sendPacket(presence);  
    240.             Log.v("state""设置在线");  
    241.             break;  
    242.         case 1:  
    243.             presence = new Presence(Presence.Type.available);  
    244.             presence.setMode(Presence.Mode.chat);  
    245.             con.sendPacket(presence);  
    246.             Log.v("state""设置Q我吧");  
    247.             break;  
    248.         case 2:  
    249.             presence = new Presence(Presence.Type.available);  
    250.             presence.setMode(Presence.Mode.dnd);  
    251.             con.sendPacket(presence);  
    252.             Log.v("state""设置忙碌");  
    253.             break;  
    254.         case 3:  
    255.             presence = new Presence(Presence.Type.available);  
    256.             presence.setMode(Presence.Mode.away);  
    257.             con.sendPacket(presence);  
    258.             Log.v("state""设置离开");  
    259.             break;  
    260.         case 4:  
    261.             Roster roster = con.getRoster();  
    262.             Collection<RosterEntry> entries = roster.getEntries();  
    263.             for (RosterEntry entry : entries) {  
    264.                 presence = new Presence(Presence.Type.unavailable);  
    265.                 presence.setPacketID(Packet.ID_NOT_AVAILABLE);  
    266.                 presence.setFrom(con.getUser());  
    267.                 presence.setTo(entry.getUser());  
    268.                 con.sendPacket(presence);  
    269.                 Log.v("state", presence.toXML());  
    270.             }  
    271.             // 向同一用户的其他客户端发送隐身状态  
    272.             presence = new Presence(Presence.Type.unavailable);  
    273.             presence.setPacketID(Packet.ID_NOT_AVAILABLE);  
    274.             presence.setFrom(con.getUser());  
    275.             presence.setTo(StringUtils.parseBareAddress(con.getUser()));  
    276.             con.sendPacket(presence);  
    277.             Log.v("state""设置隐身");  
    278.             break;  
    279.         case 5:  
    280.             presence = new Presence(Presence.Type.unavailable);  
    281.             con.sendPacket(presence);  
    282.             Log.v("state""设置离线");  
    283.             break;  
    284.         default:  
    285.             break;  
    286.         }  
    287.     }  
    288.   
    289.     /** 
    290.      * 获取所有组 
    291.      *  
    292.      * @return 所有组集合 
    293.      */  
    294.     public List<RosterGroup> getGroups() {  
    295.         if (getConnection() == null)  
    296.             return null;  
    297.         List<RosterGroup> grouplist = new ArrayList<RosterGroup>();  
    298.         Collection<RosterGroup> rosterGroup = getConnection().getRoster()  
    299.                 .getGroups();  
    300.         Iterator<RosterGroup> i = rosterGroup.iterator();  
    301.         while (i.hasNext()) {  
    302.             grouplist.add(i.next());  
    303.         }  
    304.         return grouplist;  
    305.     }  
    306.   
    307.     /** 
    308.      * 获取某个组里面的所有好友 
    309.      *  
    310.      * @param roster 
    311.      * @param groupName 
    312.      *            组名 
    313.      * @return 
    314.      */  
    315.     public List<RosterEntry> getEntriesByGroup(String groupName) {  
    316.         if (getConnection() == null)  
    317.             return null;  
    318.         List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();  
    319.         RosterGroup rosterGroup = getConnection().getRoster().getGroup(  
    320.                 groupName);  
    321.         Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();  
    322.         Iterator<RosterEntry> i = rosterEntry.iterator();  
    323.         while (i.hasNext()) {  
    324.             Entrieslist.add(i.next());  
    325.         }  
    326.         return Entrieslist;  
    327.     }  
    328.   
    329.     /** 
    330.      * 获取所有好友信息 
    331.      *  
    332.      * @return 
    333.      */  
    334.     public List<RosterEntry> getAllEntries() {  
    335.         if (getConnection() == null)  
    336.             return null;  
    337.         List<RosterEntry> Entrieslist = new ArrayList<RosterEntry>();  
    338.         Collection<RosterEntry> rosterEntry = getConnection().getRoster()  
    339.                 .getEntries();  
    340.         Iterator<RosterEntry> i = rosterEntry.iterator();  
    341.         while (i.hasNext()) {  
    342.             Entrieslist.add(i.next());  
    343.         }  
    344.         return Entrieslist;  
    345.     }  
    346.   
    347.     /** 
    348.      * 获取用户VCard信息 
    349.      *  
    350.      * @param connection 
    351.      * @param user 
    352.      * @return 
    353.      * @throws XMPPException 
    354.      */  
    355.     public VCard getUserVCard(String user) {  
    356.         if (getConnection() == null)  
    357.             return null;  
    358.         VCard vcard = new VCard();  
    359.         try {  
    360.             vcard.load(getConnection(), user);  
    361.         } catch (XMPPException e) {  
    362.             e.printStackTrace();  
    363.         }  
    364.         return vcard;  
    365.     }  
    366.   
    367.     /** 
    368.      * 获取用户头像信息 
    369.      *  
    370.      * @param connection 
    371.      * @param user 
    372.      * @return 
    373.      */  
    374.     public Drawable getUserImage(String user) {  
    375.         if (getConnection() == null)  
    376.             return null;  
    377.         ByteArrayInputStream bais = null;  
    378.         try {  
    379.             VCard vcard = new VCard();  
    380.             // 加入这句代码,解决No VCard for  
    381.             ProviderManager.getInstance().addIQProvider("vCard""vcard-temp",  
    382.                     new org.jivesoftware.smackx.provider.VCardProvider());  
    383.             if (user == "" || user == null || user.trim().length() <= 0) {  
    384.                 return null;  
    385.             }  
    386.             vcard.load(getConnection(), user + "@"  
    387.                     + getConnection().getServiceName());  
    388.   
    389.             if (vcard == null || vcard.getAvatar() == null)  
    390.                 return null;  
    391.             bais = new ByteArrayInputStream(vcard.getAvatar());  
    392.         } catch (Exception e) {  
    393.             e.printStackTrace();  
    394.             return null;  
    395.         }  
    396.         return FormatTools.getInstance().InputStream2Drawable(bais);  
    397.     }  
    398.   
    399.     /** 
    400.      * 添加一个分组 
    401.      *  
    402.      * @param groupName 
    403.      * @return 
    404.      */  
    405.     public boolean addGroup(String groupName) {  
    406.         if (getConnection() == null)  
    407.             return false;  
    408.         try {  
    409.             getConnection().getRoster().createGroup(groupName);  
    410.             Log.v("addGroup", groupName + "創建成功");  
    411.             return true;  
    412.         } catch (Exception e) {  
    413.             e.printStackTrace();  
    414.             return false;  
    415.         }  
    416.     }  
    417.   
    418.     /** 
    419.      * 删除分组 
    420.      *  
    421.      * @param groupName 
    422.      * @return 
    423.      */  
    424.     public boolean removeGroup(String groupName) {  
    425.         return true;  
    426.     }  
    427.   
    428.     /** 
    429.      * 添加好友 无分组 
    430.      *  
    431.      * @param userName 
    432.      * @param name 
    433.      * @return 
    434.      */  
    435.     public boolean addUser(String userName, String name) {  
    436.         if (getConnection() == null)  
    437.             return false;  
    438.         try {  
    439.             getConnection().getRoster().createEntry(userName, name, null);  
    440.             return true;  
    441.         } catch (Exception e) {  
    442.             e.printStackTrace();  
    443.             return false;  
    444.         }  
    445.     }  
    446.   
    447.     /** 
    448.      * 添加好友 有分组 
    449.      *  
    450.      * @param userName 
    451.      * @param name 
    452.      * @param groupName 
    453.      * @return 
    454.      */  
    455.     public boolean addUser(String userName, String name, String groupName) {  
    456.         if (getConnection() == null)  
    457.             return false;  
    458.         try {  
    459.             Presence subscription = new Presence(Presence.Type.subscribed);  
    460.             subscription.setTo(userName);  
    461.             userName += "@" + getConnection().getServiceName();  
    462.             getConnection().sendPacket(subscription);  
    463.             getConnection().getRoster().createEntry(userName, name,  
    464.                     new String[] { groupName });  
    465.             return true;  
    466.         } catch (Exception e) {  
    467.             e.printStackTrace();  
    468.             return false;  
    469.         }  
    470.     }  
    471.   
    472.     /** 
    473.      * 删除好友 
    474.      *  
    475.      * @param userName 
    476.      * @return 
    477.      */  
    478.     public boolean removeUser(String userName) {  
    479.         if (getConnection() == null)  
    480.             return false;  
    481.         try {  
    482.             RosterEntry entry = null;  
    483.             if (userName.contains("@"))  
    484.                 entry = getConnection().getRoster().getEntry(userName);  
    485.             else  
    486.                 entry = getConnection().getRoster().getEntry(  
    487.                         userName + "@" + getConnection().getServiceName());  
    488.             if (entry == null)  
    489.                 entry = getConnection().getRoster().getEntry(userName);  
    490.             getConnection().getRoster().removeEntry(entry);  
    491.   
    492.             return true;  
    493.         } catch (Exception e) {  
    494.             e.printStackTrace();  
    495.             return false;  
    496.         }  
    497.     }  
    498.   
    499.     /** 
    500.      * 查询用户 
    501.      *  
    502.      * @param userName 
    503.      * @return 
    504.      * @throws XMPPException 
    505.      */  
    506.     public List<HashMap<String, String>> searchUsers(String userName) {  
    507.         if (getConnection() == null)  
    508.             return null;  
    509.         HashMap<String, String> user = null;  
    510.         List<HashMap<String, String>> results = new ArrayList<HashMap<String, String>>();  
    511.         try {  
    512.             new ServiceDiscoveryManager(getConnection());  
    513.   
    514.             UserSearchManager usm = new UserSearchManager(getConnection());  
    515.   
    516.             Form searchForm = usm.getSearchForm(getConnection()  
    517.                     .getServiceName());  
    518.             Form answerForm = searchForm.createAnswerForm();  
    519.             answerForm.setAnswer("userAccount"true);  
    520.             answerForm.setAnswer("userPhote", userName);  
    521.             ReportedData data = usm.getSearchResults(answerForm, "search"  
    522.                     + getConnection().getServiceName());  
    523.   
    524.             Iterator<Row> it = data.getRows();  
    525.             Row row = null;  
    526.             while (it.hasNext()) {  
    527.                 user = new HashMap<String, String>();  
    528.                 row = it.next();  
    529.                 user.put("userAccount", row.getValues("userAccount").next()  
    530.                         .toString());  
    531.                 user.put("userPhote", row.getValues("userPhote").next()  
    532.                         .toString());  
    533.                 results.add(user);  
    534.                 // 若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空  
    535.             }  
    536.         } catch (XMPPException e) {  
    537.             e.printStackTrace();  
    538.         }  
    539.         return results;  
    540.     }  
    541.   
    542.     /** 
    543.      * 修改心情 
    544.      *  
    545.      * @param connection 
    546.      * @param status 
    547.      */  
    548.     public void changeStateMessage(String status) {  
    549.         if (getConnection() == null)  
    550.             return;  
    551.         Presence presence = new Presence(Presence.Type.available);  
    552.         presence.setStatus(status);  
    553.         getConnection().sendPacket(presence);  
    554.     }  
    555.   
    556.     /** 
    557.      * 修改用户头像 
    558.      *  
    559.      * @param file 
    560.      */  
    561.     public boolean changeImage(File file) {  
    562.         if (getConnection() == null)  
    563.             return false;  
    564.         try {  
    565.             VCard vcard = new VCard();  
    566.             vcard.load(getConnection());  
    567.   
    568.             byte[] bytes;  
    569.   
    570.             bytes = getFileBytes(file);  
    571.             String encodedImage = StringUtils.encodeBase64(bytes);  
    572.             vcard.setAvatar(bytes, encodedImage);  
    573.             vcard.setEncodedImage(encodedImage);  
    574.             vcard.setField("PHOTO""<TYPE>image/jpg</TYPE><BINVAL>"  
    575.                     + encodedImage + "</BINVAL>"true);  
    576.   
    577.             ByteArrayInputStream bais = new ByteArrayInputStream(  
    578.                     vcard.getAvatar());  
    579.             FormatTools.getInstance().InputStream2Bitmap(bais);  
    580.   
    581.             vcard.save(getConnection());  
    582.             return true;  
    583.         } catch (Exception e) {  
    584.             e.printStackTrace();  
    585.             return false;  
    586.         }  
    587.     }  
    588.   
    589.     /** 
    590.      * 文件转字节 
    591.      *  
    592.      * @param file 
    593.      * @return 
    594.      * @throws IOException 
    595.      */  
    596.     private byte[] getFileBytes(File file) throws IOException {  
    597.         BufferedInputStream bis = null;  
    598.         try {  
    599.             bis = new BufferedInputStream(new FileInputStream(file));  
    600.             int bytes = (int) file.length();  
    601.             byte[] buffer = new byte[bytes];  
    602.             int readBytes = bis.read(buffer);  
    603.             if (readBytes != buffer.length) {  
    604.                 throw new IOException("Entire file not read");  
    605.             }  
    606.             return buffer;  
    607.         } finally {  
    608.             if (bis != null) {  
    609.                 bis.close();  
    610.             }  
    611.         }  
    612.     }  
    613.   
    614.     /** 
    615.      * 删除当前用户 
    616.      *  
    617.      * @return 
    618.      */  
    619.     public boolean deleteAccount() {  
    620.         if (getConnection() == null)  
    621.             return false;  
    622.         try {  
    623.             getConnection().getAccountManager().deleteAccount();  
    624.             return true;  
    625.         } catch (XMPPException e) {  
    626.             return false;  
    627.         }  
    628.     }  
    629.   
    630.     /** 
    631.      * 修改密码 
    632.      *  
    633.      * @return 
    634.      */  
    635.     public boolean changePassword(String pwd) {  
    636.         if (getConnection() == null)  
    637.             return false;  
    638.         try {  
    639.             getConnection().getAccountManager().changePassword(pwd);  
    640.             return true;  
    641.         } catch (XMPPException e) {  
    642.             return false;  
    643.         }  
    644.     }  
    645.   
    646.     /** 
    647.      * 初始化会议室列表 
    648.      */  
    649.     public List<HostedRoom> getHostRooms() {  
    650.         if (getConnection() == null)  
    651.             return null;  
    652.         Collection<HostedRoom> hostrooms = null;  
    653.         List<HostedRoom> roominfos = new ArrayList<HostedRoom>();  
    654.         try {  
    655.             new ServiceDiscoveryManager(getConnection());  
    656.             hostrooms = MultiUserChat.getHostedRooms(getConnection(),  
    657.                     getConnection().getServiceName());  
    658.             for (HostedRoom entry : hostrooms) {  
    659.                 roominfos.add(entry);  
    660.                 Log.i("room",  
    661.                         "名字:" + entry.getName() + " - ID:" + entry.getJid());  
    662.             }  
    663.             Log.i("room""服务会议数量:" + roominfos.size());  
    664.         } catch (XMPPException e) {  
    665.             e.printStackTrace();  
    666.         }  
    667.         return roominfos;  
    668.     }  
    669.   
    670.     /** 
    671.      * 创建房间 
    672.      *  
    673.      * @param roomName 
    674.      *            房间名称 
    675.      */  
    676.     public MultiUserChat createRoom(String user, String roomName,  
    677.             String password) {  
    678.         if (getConnection() == null)  
    679.             return null;  
    680.   
    681.         MultiUserChat muc = null;  
    682.         try {  
    683.             // 创建一个MultiUserChat  
    684.             muc = new MultiUserChat(getConnection(), roomName + "@conference."  
    685.                     + getConnection().getServiceName());  
    686.             // 创建聊天室  
    687.             muc.create(roomName);  
    688.             // 获得聊天室的配置表单  
    689.             Form form = muc.getConfigurationForm();  
    690.             // 根据原始表单创建一个要提交的新表单。  
    691.             Form submitForm = form.createAnswerForm();  
    692.             // 向要提交的表单添加默认答复  
    693.             for (Iterator<FormField> fields = form.getFields(); fields  
    694.                     .hasNext();) {  
    695.                 FormField field = (FormField) fields.next();  
    696.                 if (!FormField.TYPE_HIDDEN.equals(field.getType())  
    697.                         && field.getVariable() != null) {  
    698.                     // 设置默认值作为答复  
    699.                     submitForm.setDefaultAnswer(field.getVariable());  
    700.                 }  
    701.             }  
    702.             // 设置聊天室的新拥有者  
    703.             List<String> owners = new ArrayList<String>();  
    704.             owners.add(getConnection().getUser());// 用户JID  
    705.             submitForm.setAnswer("muc#roomconfig_roomowners", owners);  
    706.             // 设置聊天室是持久聊天室,即将要被保存下来  
    707.             submitForm.setAnswer("muc#roomconfig_persistentroom"true);  
    708.             // 房间仅对成员开放  
    709.             submitForm.setAnswer("muc#roomconfig_membersonly"false);  
    710.             // 允许占有者邀请其他人  
    711.             submitForm.setAnswer("muc#roomconfig_allowinvites"true);  
    712.             if (!password.equals("")) {  
    713.                 // 进入是否需要密码  
    714.                 submitForm.setAnswer("muc#roomconfig_passwordprotectedroom",  
    715.                         true);  
    716.                 // 设置进入密码  
    717.                 submitForm.setAnswer("muc#roomconfig_roomsecret", password);  
    718.             }  
    719.             // 能够发现占有者真实 JID 的角色  
    720.             // submitForm.setAnswer("muc#roomconfig_whois", "anyone");  
    721.             // 登录房间对话  
    722.             submitForm.setAnswer("muc#roomconfig_enablelogging"true);  
    723.             // 仅允许注册的昵称登录  
    724.             submitForm.setAnswer("x-muc#roomconfig_reservednick"true);  
    725.             // 允许使用者修改昵称  
    726.             submitForm.setAnswer("x-muc#roomconfig_canchangenick"false);  
    727.             // 允许用户注册房间  
    728.             submitForm.setAnswer("x-muc#roomconfig_registration"false);  
    729.             // 发送已完成的表单(有默认值)到服务器来配置聊天室  
    730.             muc.sendConfigurationForm(submitForm);  
    731.         } catch (XMPPException e) {  
    732.             e.printStackTrace();  
    733.             return null;  
    734.         }  
    735.         return muc;  
    736.     }  
    737.   
    738.     /** 
    739.      * 加入会议室 
    740.      *  
    741.      * @param user 
    742.      *            昵称 
    743.      * @param password 
    744.      *            会议室密码 
    745.      * @param roomsName 
    746.      *            会议室名 
    747.      */  
    748.     public MultiUserChat joinMultiUserChat(String user, String roomsName,  
    749.             String password) {  
    750.         if (getConnection() == null)  
    751.             return null;  
    752.         try {  
    753.             // 使用XMPPConnection创建一个MultiUserChat窗口  
    754.             MultiUserChat muc = new MultiUserChat(getConnection(), roomsName  
    755.                     + "@conference." + getConnection().getServiceName());  
    756.             // 聊天室服务将会决定要接受的历史记录数量  
    757.             DiscussionHistory history = new DiscussionHistory();  
    758.             history.setMaxChars(0);  
    759.             // history.setSince(new Date());  
    760.             // 用户加入聊天室  
    761.             muc.join(user, password, history,  
    762.                     SmackConfiguration.getPacketReplyTimeout());  
    763.             Log.i("MultiUserChat""会议室【"+roomsName+"】加入成功........");  
    764.             return muc;  
    765.         } catch (XMPPException e) {  
    766.             e.printStackTrace();  
    767.             Log.i("MultiUserChat""会议室【"+roomsName+"】加入失败........");  
    768.             return null;  
    769.         }  
    770.     }  
    771.   
    772.     /** 
    773.      * 查询会议室成员名字 
    774.      *  
    775.      * @param muc 
    776.      */  
    777.     public List<String> findMulitUser(MultiUserChat muc) {  
    778.         if (getConnection() == null)  
    779.             return null;  
    780.         List<String> listUser = new ArrayList<String>();  
    781.         Iterator<String> it = muc.getOccupants();  
    782.         // 遍历出聊天室人员名称  
    783.         while (it.hasNext()) {  
    784.             // 聊天室成员名字  
    785.             String name = StringUtils.parseResource(it.next());  
    786.             listUser.add(name);  
    787.         }  
    788.         return listUser;  
    789.     }  
    790.   
    791.     /** 
    792.      * 发送文件 
    793.      *  
    794.      * @param user 
    795.      * @param filePath 
    796.      */  
    797.     public void sendFile(String user, String filePath) {  
    798.         if (getConnection() == null)  
    799.             return;  
    800.         // 创建文件传输管理器  
    801.         FileTransferManager manager = new FileTransferManager(getConnection());  
    802.   
    803.         // 创建输出的文件传输  
    804.         OutgoingFileTransfer transfer = manager  
    805.                 .createOutgoingFileTransfer(user);  
    806.   
    807.         // 发送文件  
    808.         try {  
    809.             transfer.sendFile(new File(filePath), "You won't believe this!");  
    810.         } catch (XMPPException e) {  
    811.             e.printStackTrace();  
    812.         }  
    813.     }  
    814.   
    815.     /** 
    816.      * 获取离线消息 
    817.      *  
    818.      * @return 
    819.      */  
    820.     public Map<String, List<HashMap<String, String>>> getHisMessage() {  
    821.         if (getConnection() == null)  
    822.             return null;  
    823.         Map<String, List<HashMap<String, String>>> offlineMsgs = null;  
    824.   
    825.         try {  
    826.             OfflineMessageManager offlineManager = new OfflineMessageManager(  
    827.                     getConnection());  
    828.             Iterator<Message> it = offlineManager.getMessages();  
    829.   
    830.             int count = offlineManager.getMessageCount();  
    831.             if (count <= 0)  
    832.                 return null;  
    833.             offlineMsgs = new HashMap<String, List<HashMap<String, String>>>();  
    834.   
    835.             while (it.hasNext()) {  
    836.                 Message message = it.next();  
    837.                 String fromUser = StringUtils.parseName(message.getFrom());  
    838.                 ;  
    839.                 HashMap<String, String> histrory = new HashMap<String, String>();  
    840.                 histrory.put("useraccount",  
    841.                         StringUtils.parseName(getConnection().getUser()));  
    842.                 histrory.put("friendaccount", fromUser);  
    843.                 histrory.put("info", message.getBody());  
    844.                 histrory.put("type""left");  
    845.                 if (offlineMsgs.containsKey(fromUser)) {  
    846.                     offlineMsgs.get(fromUser).add(histrory);  
    847.                 } else {  
    848.                     List<HashMap<String, String>> temp = new ArrayList<HashMap<String, String>>();  
    849.                     temp.add(histrory);  
    850.                     offlineMsgs.put(fromUser, temp);  
    851.                 }  
    852.             }  
    853.             offlineManager.deleteMessages();  
    854.         } catch (Exception e) {  
    855.             e.printStackTrace();  
    856.         }  
    857.         return offlineMsgs;  
    858.     }  
    859.       
    860.     /** 
    861.      * 判断OpenFire用户的状态 strUrl :  
    862.      * url格式 - http://my.openfire.com:9090/plugins/presence 
    863.      * /status?jid=user1@SERVER_NAME&type=xml  
    864.      * 返回值 : 0 - 用户不存在; 1 - 用户在线; 2 - 用户离线  
    865.      * 说明 :必须要求 OpenFire加载 presence 插件,同时设置任何人都可以访问 
    866.      */     
    867.     public int IsUserOnLine(String user) {  
    868.         String url = "http://"+SERVER_HOST+":9090/plugins/presence/status?" +  
    869.                 "jid="+ user +"@"+ SERVER_NAME +"&type=xml";  
    870.         int shOnLineState = 0// 不存在  
    871.         try {  
    872.             URL oUrl = new URL(url);  
    873.             URLConnection oConn = oUrl.openConnection();  
    874.             if (oConn != null) {  
    875.                 BufferedReader oIn = new BufferedReader(new InputStreamReader(  
    876.                         oConn.getInputStream()));  
    877.                 if (null != oIn) {  
    878.                     String strFlag = oIn.readLine();  
    879.                     oIn.close();  
    880.                     System.out.println("strFlag"+strFlag);  
    881.                     if (strFlag.indexOf("type="unavailable"") >= 0) {  
    882.                         shOnLineState = 2;  
    883.                     }  
    884.                     if (strFlag.indexOf("type="error"") >= 0) {  
    885.                         shOnLineState = 0;  
    886.                     } else if (strFlag.indexOf("priority") >= 0  
    887.                             || strFlag.indexOf("id="") >= 0) {  
    888.                         shOnLineState = 1;  
    889.                     }  
    890.                 }  
    891.             }  
    892.         } catch (Exception e) {  
    893.             e.printStackTrace();  
    894.         }  
    895.   
    896.         return shOnLineState;  
    897.     }  
    898.   
    899.     /** 
    900.      * 加入providers的函数 ASmack在/META-INF缺少一个smack.providers 文件 
    901.      *  
    902.      * @param pm 
    903.      */  
    904.     public void configureConnection(ProviderManager pm) {  
    905.   
    906.         // Private Data Storage  
    907.         pm.addIQProvider("query""jabber:iq:private",  
    908.                 new PrivateDataManager.PrivateDataIQProvider());  
    909.   
    910.         // Time  
    911.         try {  
    912.             pm.addIQProvider("query""jabber:iq:time",  
    913.                     Class.forName("org.jivesoftware.smackx.packet.Time"));  
    914.         } catch (ClassNotFoundException e) {  
    915.             Log.w("TestClient",  
    916.                     "Can't load class for org.jivesoftware.smackx.packet.Time");  
    917.         }  
    918.   
    919.         // Roster Exchange  
    920.         pm.addExtensionProvider("x""jabber:x:roster",  
    921.                 new RosterExchangeProvider());  
    922.   
    923.         // Message Events  
    924.         pm.addExtensionProvider("x""jabber:x:event",  
    925.                 new MessageEventProvider());  
    926.   
    927.         // Chat State  
    928.         pm.addExtensionProvider("active",  
    929.                 "http://jabber.org/protocol/chatstates",  
    930.                 new ChatStateExtension.Provider());  
    931.         pm.addExtensionProvider("composing",  
    932.                 "http://jabber.org/protocol/chatstates",  
    933.                 new ChatStateExtension.Provider());  
    934.         pm.addExtensionProvider("paused",  
    935.                 "http://jabber.org/protocol/chatstates",  
    936.                 new ChatStateExtension.Provider());  
    937.         pm.addExtensionProvider("inactive",  
    938.                 "http://jabber.org/protocol/chatstates",  
    939.                 new ChatStateExtension.Provider());  
    940.         pm.addExtensionProvider("gone",  
    941.                 "http://jabber.org/protocol/chatstates",  
    942.                 new ChatStateExtension.Provider());  
    943.   
    944.         // XHTML  
    945.         pm.addExtensionProvider("html""http://jabber.org/protocol/xhtml-im",  
    946.                 new XHTMLExtensionProvider());  
    947.   
    948.         // Group Chat Invitations  
    949.         pm.addExtensionProvider("x""jabber:x:conference",  
    950.                 new GroupChatInvitation.Provider());  
    951.   
    952.         // Service Discovery # Items  
    953.         pm.addIQProvider("query""http://jabber.org/protocol/disco#items",  
    954.                 new DiscoverItemsProvider());  
    955.   
    956.         // Service Discovery # Info  
    957.         pm.addIQProvider("query""http://jabber.org/protocol/disco#info",  
    958.                 new DiscoverInfoProvider());  
    959.   
    960.         // Data Forms  
    961.         pm.addExtensionProvider("x""jabber:x:data"new DataFormProvider());  
    962.   
    963.         // MUC User  
    964.         pm.addExtensionProvider("x""http://jabber.org/protocol/muc#user",  
    965.                 new MUCUserProvider());  
    966.   
    967.         // MUC Admin  
    968.         pm.addIQProvider("query""http://jabber.org/protocol/muc#admin",  
    969.                 new MUCAdminProvider());  
    970.   
    971.         // MUC Owner  
    972.         pm.addIQProvider("query""http://jabber.org/protocol/muc#owner",  
    973.                 new MUCOwnerProvider());  
    974.   
    975.         // Delayed Delivery  
    976.         pm.addExtensionProvider("x""jabber:x:delay",  
    977.                 new DelayInformationProvider());  
    978.   
    979.         // Version  
    980.         try {  
    981.             pm.addIQProvider("query""jabber:iq:version",  
    982.                     Class.forName("org.jivesoftware.smackx.packet.Version"));  
    983.         } catch (ClassNotFoundException e) {  
    984.             // Not sure what's happening here.  
    985.         }  
    986.   
    987.         // VCard  
    988.         pm.addIQProvider("vCard""vcard-temp"new VCardProvider());  
    989.   
    990.         // Offline Message Requests  
    991.         pm.addIQProvider("offline""http://jabber.org/protocol/offline",  
    992.                 new OfflineMessageRequest.Provider());  
    993.   
    994.         // Offline Message Indicator  
    995.         pm.addExtensionProvider("offline",  
    996.                 "http://jabber.org/protocol/offline",  
    997.                 new OfflineMessageInfo.Provider());  
    998.   
    999.         // Last Activity  
    1000.         pm.addIQProvider("query""jabber:iq:last"new LastActivity.Provider());  
    1001.   
    1002.         // User Search  
    1003.         pm.addIQProvider("query""jabber:iq:search"new UserSearch.Provider());  
    1004.   
    1005.         // SharedGroupsInfo  
    1006.         pm.addIQProvider("sharedgroup",  
    1007.                 "http://www.jivesoftware.org/protocol/sharedgroup",  
    1008.                 new SharedGroupsInfo.Provider());  
    1009.   
    1010.         // JEP-33: Extended Stanza Addressing  
    1011.         pm.addExtensionProvider("addresses",  
    1012.                 "http://jabber.org/protocol/address",  
    1013.                 new MultipleAddressesProvider());  
    1014.   
    1015.         // FileTransfer  
    1016.         pm.addIQProvider("si""http://jabber.org/protocol/si",  
    1017.                 new StreamInitiationProvider());  
    1018.   
    1019.         pm.addIQProvider("query""http://jabber.org/protocol/bytestreams",  
    1020.                 new BytestreamsProvider());  
    1021.   
    1022.         // Privacy  
    1023.         pm.addIQProvider("query""jabber:iq:privacy"new PrivacyProvider());  
    1024.         pm.addIQProvider("command""http://jabber.org/protocol/commands",  
    1025.                 new AdHocCommandDataProvider());  
    1026.         pm.addExtensionProvider("malformed-action",  
    1027.                 "http://jabber.org/protocol/commands",  
    1028.                 new AdHocCommandDataProvider.MalformedActionError());  
    1029.         pm.addExtensionProvider("bad-locale",  
    1030.                 "http://jabber.org/protocol/commands",  
    1031.                 new AdHocCommandDataProvider.BadLocaleError());  
    1032.         pm.addExtensionProvider("bad-payload",  
    1033.                 "http://jabber.org/protocol/commands",  
    1034.                 new AdHocCommandDataProvider.BadPayloadError());  
    1035.         pm.addExtensionProvider("bad-sessionid",  
    1036.                 "http://jabber.org/protocol/commands",  
    1037.                 new AdHocCommandDataProvider.BadSessionIDError());  
    1038.         pm.addExtensionProvider("session-expired",  
    1039.                 "http://jabber.org/protocol/commands",  
    1040.                 new AdHocCommandDataProvider.SessionExpiredError());  
    1041.     }  
    1042.   
    1043. }  
    1044.     /** 
    1045.      * 判断OpenFire用户的状态 strUrl :  
    1046.      * url格式 - http://my.openfire.com:9090/plugins/presence 
    1047.      * /status?jid=user1@SERVER_NAME&type=xml  
    1048.      * 返回值 : 0 - 用户不存在; 1 - 用户在线; 2 - 用户离线  
    1049.      * 说明 :必须要求 OpenFire加载 presence 插件,同时设置任何人都可以访问 
    1050.      */     
    1051.     public int IsUserOnLine(String user) {  
    1052.         String url = "http://"+SERVER_HOST+":9090/plugins/presence/status?" +  
    1053.                 "jid="+ user +"@"+ SERVER_NAME +"&type=xml";  
    1054.         int shOnLineState = 0// 不存在  
    1055.         try {  
    1056.             URL oUrl = new URL(url);  
    1057.             URLConnection oConn = oUrl.openConnection();  
    1058.             if (oConn != null) {  
    1059.                 BufferedReader oIn = new BufferedReader(new InputStreamReader(  
    1060.                         oConn.getInputStream()));  
    1061.                 if (null != oIn) {  
    1062.                     String strFlag = oIn.readLine();  
    1063.                     oIn.close();  
    1064.                     System.out.println("strFlag"+strFlag);  
    1065.                     if (strFlag.indexOf("type="unavailable"") >= 0) {  
    1066.                         shOnLineState = 2;  
    1067.                     }  
    1068.                     if (strFlag.indexOf("type="error"") >= 0) {  
    1069.                         shOnLineState = 0;  
    1070.                     } else if (strFlag.indexOf("priority") >= 0  
    1071.                             || strFlag.indexOf("id="") >= 0) {  
    1072.                         shOnLineState = 1;  
    1073.                     }  
    1074.                 }  
    1075.             }  
    1076.         } catch (Exception e) {  
    1077.             e.printStackTrace();  
    1078.         }  
    1079.         return shOnLineState;  
    1080.     }  
  • 相关阅读:
    蓝桥网试题 java 基础练习 特殊的数字
    蓝桥网试题 java 基础练习 杨辉三角形
    蓝桥网试题 java 基础练习 查找整数
    蓝桥网试题 java 基础练习 数列特征
    蓝桥网试题 java 基础练习 字母图形
    蓝桥网试题 java 基础练习 01字串
    蓝桥网试题 java 基础练习 回文数
    蓝桥网试题 java 基础练习 特殊回文数
    Using text search in Web page with Sikuli
    each of which 用法
  • 原文地址:https://www.cnblogs.com/jasonkent27/p/4098436.html
Copyright © 2011-2022 走看看