2

asmack lib と openfire サーバーを使用したシンプルなチャット アプリケーションを開発しました。しかし、同じものを使用してチャットを開始すると、そのユーザーが openfire サーバーで利用できるため、常にプレゼンス ステータスが利用できなくなります。

さまざまなことを試し、talk.google.com サーバーで同じコードをテストしましたが、非常にうまく機能します。ここで、ユーザーのプレゼンス状態を設定しています-

                  Presence presence  = new Presence(Presence.Type.available); ; 
                  presence.setStatus("Online, Programmatically!");
                  presence.setPriority(24);
                  presence.setMode(Presence.Mode.available);
                  connection.sendPacket(presence);
                  try {
                    Thread.sleep(10000);
                  } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                  }

名簿エントリを表示すると、プレゼンス ステータスが null になり、プレゼンス タイプが利用できなくなります。なぜそうなるのかわかりません。さまざまなことを試しました。同じマシン上の 2 つの異なるエミュレーターでコードをテストしています。同じせいでしょうか?

名簿エントリとプレゼンスのタイプを表示するコードは次のとおりです。

                   Roster roster = connection.getRoster();
                  Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
                  roster.addRosterListener(new RosterListener() {
                      // Ignored events public void entriesAdded(Collection<String> addresses) {}
                      public void entriesDeleted(Collection<String> addresses) {}
                      public void entriesUpdated(Collection<String> addresses) {}
                      public void presenceChanged(Presence presence) {
                          System.out.println("Presence changed: " + presence.getFrom() + " " + presence);
                      }
                      @Override
                      public void entriesAdded(Collection<String> arg0) {
                          // TODO Auto-generated method stub
                      }
                  });
                  try { Thread.sleep(5000); } catch (InterruptedException e) { }
                  Collection<RosterEntry> entries = roster.getEntries();                
                  for (RosterEntry entry : entries) {                           
                      Presence subscribed = new Presence(Presence.Type.subscribed); 
                      subscribed.setTo(entry.getUser()); 
                      connection.sendPacket(subscribed);

                      Log.d("JWP", "RosterEntry " + entry);
                      Log.d("JWP", "User: " + entry.getUser());
                      Log.d("JWP", "Name: " + entry.getName());
                      Log.d("JWP", "Status: " + entry.getStatus());
                      Log.d("JWP", "Type: " + entry.getType());               
                      Presence entryPresence = roster.getPresence(entry.getUser());
                      Log.d("JWP", "Presence Status: "+ entryPresence.getMode());
                      Log.d("JWP", "Presence Type: " + entryPresence.getType());

                      Presence.Type type = entryPresence.getType();
                      if (type == Presence.Type.available){
                          Log.d("JWP", "Presence AVIALABLE");
                          Log.d("JWP", "Presence : " + entryPresence);
                      }
                  }
4

0 に答える 0