0

asmack 8-0.8.3 を使用しています。

連絡先が「連絡可能」に移動したときに、連絡先からのプレゼンスの変更に関するメッセージを受信しません。1 つの連絡先が「使用可能」から「dnd」に変わった場合、メッセージを受け取ります。しかし、その逆ではありません。

Contact passes: "available" --> "dnd" --> "available" --> "dnd"
I receive:                  Presence{dnd}             Presence{dnd}

一方、私は 2 日の間にプレゼンス アップデート {利用可能} を受け取ることを期待しています。

「利用可能」以外のプレゼンスの更新を受け取るので、リスナーは正常に動作すると思います。また、連絡先のプレゼンスを正しく購読したと思います...

  private class FriendListener implements RosterListener {

    public void entriesAdded(Collection<String> addresses) { }
    public void entriesUpdated(Collection<String> addresses) { }
    public void entriesDeleted(Collection<String> addresses) { }

    public void presenceChanged(Presence presence) {
      String fromUserID = StringUtils.parseBareAddress(presence.getFrom());
      System.out.println(
        "Presence changed: " + fromUserID + 
        " Presence=" + presence.toString() + 
        " Type=" + presence.getType().toString() + 
        " Mode=" + presence.getMode().toString()
      );
      mainCallback_.updatePresenceFriend(fromUserID, presence);
    }
  }

public void subscribe(String friendID, String friendName) {
  Presence presence = new Presence(Presence.Type.subscribe);
  connection.sendPacket(presence);

  RosterPacket rosterPacket = new RosterPacket();
  rosterPacket.setType(IQ.Type.SET);
  Item item = new Item(friendID, friendName);
  item.setItemType(RosterPacket.ItemType.both);
  rosterPacket.addRosterItem(item);

  connection.sendPacket(rosterPacket);
  System.out.println("Send subscribe to " + friendID);

  subscribedUsers.add(friendID);
}
4

1 に答える 1