come get l'utente online o offline in asmack, android

Possibile duplicazione:
XMPP aSmack – Come posso get lo stato utente corrente (offline / online / away / etc.)?

Sto sviluppando app chat su base Android su asmack lib. Mostra tutto l'utente sul ListView ma utilizzo un'image per mostrare l'utente online / offline. Ma restituisce solo l'image offline, anche se l'utente è online, ecco il mio codice

  • Esempio ActivityGroup
  • Come scorrere fino in fondo in uno ScrollView sull'avvio dell'attività
  • Mostra la visualizzazione personalizzata sotto l'elemento RecyclerView spostato
  • Risorse di Android "logica di fallback" migliore corrispondenza
  • Come utilizzare il constructor di query ORMLite per get i record totali in una tabella
  • Recupero dei dati di impronte digitali?
  • @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.buddies); Controller.getInstance().roster = Controller.getInstance().connection.getRoster(); // ArrayList<Buddy> buddies = new ArrayList<Buddy>(); Collection<RosterEntry> entries = Controller.getInstance().roster.getEntries(); Controller.getInstance().buddyList = new Buddy[entries.size()]; int i = 0; for (RosterEntry r : entries) { Buddy bud = new Buddy(); VCard card = new VCard(); try { ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider()); card.load(Controller.getInstance().connection, r.getUser()); } catch (XMPPException e) { Log.e("ChatOnAndroid", e.getMessage() + " " + r.getUser() + " " + e.getLocalizedMessage()); } bud.jid = r.getUser(); bud.name = r.getName(); bud.status = Controller.getInstance().roster.getPresence(r.getUser()); Controller.getInstance().buddies.add(bud); Controller.getInstance().buddyList[i++] = bud; } BuddyAdapter adapter = new BuddyAdapter(this, R.layout.buddy, Controller.getInstance().buddies); setListAdapter(adapter); /* * list = (ListView) findViewById(R.id.buddiesList); * list.setAdapter(adapter); */ } @Override protected void onListItemClick(ListView l, View v, int position, long id) { startActivity(new Intent(this, Conferences.class)); } public class BuddyAdapter extends ArrayAdapter<Buddy> { private ArrayList<Buddy> items; public BuddyAdapter(Context context, int textViewResourceId, ArrayList<Buddy> items) { super(context, textViewResourceId, items); this.items = items; } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.buddy, null); } Buddy buddy = items.get(position); if (buddy != null) { TextView tt = (TextView) v.findViewById(R.id.buddyName); ImageView iv = (ImageView) v.findViewById(R.id.buddyThumb); //buddy.status = Controller.getInstance().roster.getPresence(buddy.jid); if (buddy.status != null) { buddy.img = R.drawable.status_online; iv.setImageResource(buddy.img); } else if (buddy.status == null) { buddy.img = R.drawable.status_offline; iv.setImageResource(buddy.img); } //iv.setImageResource(buddy.img); if (tt != null) { tt.setText(buddy.name); } } return v; } } 

  • Come get l'ID di notifica?
  • Come: installare il plugin in Android Studio
  • Problemi di impostazione Ciao, app View della vigilanza in Android Studio
  • come posso deselect o reimpostare il button di scelta rapida?
  • Problemi di OnClickListener dopo che ImageButton si è spostato dopo TranslateAnimation
  • Come modificare in modo programmale il colore primario e accento in Android Lollipop?
  • 2 Solutions collect form web for “come get l'utente online o offline in asmack, android”

    È ansible get amici online e offline tramite RosterListener come ho fatto sotto e quindi aggiornare listview con nuovi dati.

     roster.addRosterListener(new RosterListener() { @Override public void presenceChanged(final Presence presence) { System.out.println("Presence changed: " + presence.getFrom() + " " + presence); runOnUiThread(new Runnable() { public void run() { // / To Update listview should clear arrayslists first // then inavalidate Listview to redraw then add new data // to Arraylists then notify adapter. JID.clear(); Names.clear(); Status.clear(); Image.clear(); list.invalidateViews(); for (RosterEntry entry : entries) { card = new VCard(); presencek = roster.getPresence(entry.getUser()); try { card.load(Main.conn, entry.getUser()); } catch (Exception e) { e.printStackTrace(); } JID.add(entry.getUser()); Names.add(card.getField("FN")); Status.add(presencek.getType().name()); Log.d("Prescence", "" + presencek.getType().name());// //num // one // log // if (bud.name == null) // bud.name = bud.jid; // buddies.add(bud); byte[] img = card.getAvatar(); if (img != null) { int len = img.length; Image.add(BitmapFactory.decodeByteArray(img, 0, len)); } else { Drawable d = getApplicationContext() .getResources().getDrawable( R.drawable.save); Bitmap bitmap = ((BitmapDrawable) d) .getBitmap(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); img = stream.toByteArray(); int len = img.length; Image.add(BitmapFactory.decodeByteArray(img, 0, len)); // Image.add(null); } // buddyList[i++] = bud; } adapter.notifyDataSetChanged(); } @Override public void entriesUpdated(Collection<String> addresses) { // TODO Auto-generated method stub } @Override public void entriesDeleted(Collection<String> addresses) { // TODO Auto-generated method stub } @Override public void entriesAdded(Collection<String> addresses) { // TODO Auto-generated method stub } }); 

    C'è un mezzo per trovare lo stato offline / online dell'utente. Può essere fatto cercando la PRESENZA DELL'UTENTE. Ecco lo snippet di codice:

    // ecco come puoi get è ONLINE o OFFLINE

      Presence availability = roster.getPresence(user); 

    Ecco il codice per get la sua modalità di presenza, vale a dire se l'utente è disponibile quindi è AWAY, DONOT DISTURB MODE o ONLINE PER CHAT.

     public int retrieveState_mode(Mode userMode, boolean isOnline) { int userState = 0; /** 0 for offline, 1 for online, 2 for away,3 for busy*/ if(userMode == Mode.dnd) { userState = 3; } else if (userMode == Mode.away || userMode == Mode.xa) { userState = 2; } else if (isOnline) { userState = 1; } return userState; } 

    è ansible salvare questo stato in un elenco di arrays come:

     mFriendsDataClass.friendState = retrieveState_mode(availability.getMode(),availability.isAvailable()); 

    Fathemes sapere se hai delle domande riguardanti xmpp / smack nell'applicazione di tipo chat

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.