Smack中的Presence getType()和isAvailable()有什么区别?

时间:2014-07-07 07:07:45

标签: xmpp chat smack

我正在尝试使用asmack在我的聊天名单中获得用户的存在。 据我所知,Presece.getType()应返回以下其中一种存在类型:

每个在线数据包都有一个类型,它是以下值之一:

available -- (Default) indicates the user is available to receive messages.
unavailable -- the user is unavailable to receive messages.
subscribe -- request subscription to recipient's presence.
subscribed -- grant subscription to sender's presence.
unsubscribe -- request removal of subscription to sender's presence.
unsubscribed -- grant removal of subscription to sender's presence.
error -- the presence packet contains an error message.

在我的状态对象上为在线用户使用Presence.getType()给了我:

Log.e("Presence?",myRoster.getPresence(entry.getUser()).getType().toString());

Unavailable

但是,在同一个用户上使用Presence.isAvailable()会给我:

Log.e("Presence?",Boolean.toString(myRoster.getPresence(entry.getUser()).isAvailable()));

True

不应该getType()和isAvailable()根据以下定义返回相同的结果吗?

public Presence.Type getType()

返回此在线数据包的类型。

public boolean isAvailable()

如果存在类型可用(在线),则返回true;如果用户不可用(离线),则返回false,或者如果这是订阅操作中涉及的在线数据包,则返回false。这是一个等同于getType()== Presence.Type.available的便捷方法。

我错过了什么?这两者之间的区别是什么?

1 个答案:

答案 0 :(得分:0)

如果查看来源,您会发现

public boolean isAvailable() {
    return type == Type.available;    
}

<{3}}状态

  

这是一个等同于getType()==的便捷方法   Presence.Type.available。