我正在使用开放式服务器和asmack在android中构建聊天应用程序。 我正在连接两个用户(让A& B)来自模拟器的开放式服务器和另外一个来自spark的用户(Lets C)。
此外,我为用户在场值的任何更改添加了名册监听器。
因此,当应用程序正在侦听名册更新时,来自模拟器(即来自asmack api)的用户的presence.getstatus值将变为null。但我得到了来自spark的用户的状态值。
以下是为状态变化而实施的代码。
public void presenceChanged(Presence presence) {
String Name="",Status="";
Log.d(TAG, "Presence value = "+presence);
Log.d(TAG, "Presence getfrom value = "+presence.getFrom());
Log.d(TAG, "Presence getstatus value = "+presence.getStatus());
Log.d(TAG, "Presence getto value = "+presence.getTo());
下面是来自spark的用户日志。
Presence value = available (Online)
Presence getfrom value = swathi@btp121374/Spark 2.6.3
Presence getstatus value = Online
Presence getto value = kpvsrkp@btp121374
及以下是来自asmack android的用户日志。
Presence value = available
Presence getfrom value = ganesh@btp121374/Smack
Presence getstatus value = null
Presence getto value = kpvsrkp@btp121374
所以这里的问题是为什么asmack用户的presence.getStatus()变为null。
Presence getstatus value = null
有人可以告诉我还需要做些什么才能获得asmack用户的presence.getStatus()值。
答案 0 :(得分:0)
使用此功能获取状态 存在mPresence = YourXmppConnection 。.getRoster()getPresence(Userjid); mPresence.getType()提供用户的可用性。根据Presence.Type.available
进行检查答案 1 :(得分:0)
new AsyncTask<Object,Object,Object>(){
@Override
protected Object doInBackground(Object[] params) {
Presence availability1=roster.getPresence("aaaaedmn1474531771@staging.cardamomapp.com");
return availability1;
}
@Override
protected void onPostExecute(Object object) {
super.onPostExecute(object);
Presence data=(Presence)object;
Log.d("Presence-----","Presence========>>"+data.getStatus());
sendBroadCast(""+data.getStatus());
}
}.execute();