Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get online users(Roster entries) using smack 4.1 in android

I have been trying to get roster entries using smack 4.1 beta 2 in android.

https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-UpgradeGuide Quotes from above link..

"Roster now follows the Manager pattern (use Roster.instanceFor to obtain an instance, no more XMPPConnection.getRoster)"

First of all i am not able get the "Roster" object, libraries that i have imported may not have that package or i miss any lib here?

I m using all the libraries mentioned in above link.

Can anyone help me to get the Roster Entries using smack 4.1?

Thanks

like image 462
Hitendra Avatar asked Feb 17 '15 10:02

Hitendra


1 Answers

This is a step-by-step solution that concludes by (hopefully) answering your question. You should pay particular attention to the Java imports in STEP 2, and the Roster.reloadAndWait() method in STEP 4.

NOTE: It is recommended that Smack code be executed using AsyncTask.

Step 1: Include the following dependencies. For Android Studio users, this is located in 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" 
}

Also ensure your program has proper permissions for TCP activity. For Android Studio users, you may add this to your AndroidManifest.xml file:

<uses-permission android:name="android.permission.INTERNET"/>

Step 2: Import the following

import org.jivesoftware.smack.roster.*; /*you may have been missing this*/
import org.jivesoftware.smack.*;
import org.jivesoftware.smack.tcp.*;
import java.util.Collection; /*optional*/

Step 3: Connect to server

/*Example solution. The exact settings would have to be adjusted outside  of practice*/
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");
...

Step 4: Get the roster

...
Roster roster = Roster.getInstanceFor(connection);

if (!roster.isLoaded()) 
    roster.reloadAndWait();

Collection <RosterEntry> entries = roster.getEntries();

for (RosterEntry entry : entries) 
    System.out.println("Here: " + entry);
like image 102
Siege Avatar answered Nov 11 '22 19:11

Siege