这是一种逐步解决方案,最终(希望能够)回答您的问题。请特别注意第2步中的Java导入和第4步中的Roster.reloadAndWait()方法。
注意:建议使用AsyncTask执行Smack代码。
步骤1:包含以下依赖项。对于Android Studio用户,这位于build.gradle(Module:app)中。
dependencies {
compile "org.igniterealtime.smack:smack-android:4.1.0-rc1"
compile "org.igniterealtime.smack:smack-android-extensions:4.1.0-rc1"
compile "org.igniterealtime.smack:smack-tcp:4.1.0-rc1"
}
同时确保您的程序对TCP活动拥有适当的权限。对于Android Studio用户,您可以将以下内容添加到您的AndroidManifest.xml文件中:
<uses-permission android:name="android.permission.INTERNET"/>
步骤2:导入以下内容
import org.jivesoftware.smack.roster.*;
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.tcp.*;
import java.util.Collection;
步骤 3:连接服务器
XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration
.builder()
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setServiceName("192.168.2.14")
.setHost("192.168.2.14")
.setPort(5222)
.setCompressionEnabled(false).build();
XMPPTCPConnection connection = new XMPPTCPConnection(conf);
try {
connection.connect();
connection.login("john","123");
...
第四步:获取名册
...
Roster roster = Roster.getInstanceFor(connection)
if (!roster.isLoaded())
roster.reloadAndWait()
Collection <RosterEntry> entries = roster.getEntries()
for (RosterEntry entry : entries)
System.out.println("Here: " + entry)