2013-10-09 56 views
0

我的聊天應用程序有一個過程來設置用戶即存在/模式狀態 - 在線,離線,隱身,離開等我使用下面的代碼這樣做: -在XMPP /啪獲取模式

presence = new Presence(Presence.Type.available); 

      if (USER_STATE.equalsIgnoreCase("Online")) { 
       presence.setMode(Presence.Mode.available); 
       setUserPresence(0); 
      }else if (USER_STATE.equalsIgnoreCase("Invisible")) { 
       presence.setMode(Presence.Mode.xa); 
       setUserPresence(1); 
      } else if (USER_STATE.equalsIgnoreCase("Away")) { 
       presence.setMode(Presence.Mode.away); 
       setUserPresence(2); 
      } else if (USER_STATE.equalsIgnoreCase("Busy")) { 
       presence.setMode(Presence.Mode.dnd); 
       setUserPresence(3); 
      } 

在這裏,當我設置用戶存在離開或不可見等,並註銷用戶。現在,當用戶再次登錄時,我想要獲得自他上次註銷後早些時候設置的用戶模式。我得到它: -

System.out.println("Loggeddd innn"); 
      // Set presence to online! 
      Presence userPresence = new Presence(Presence.Type.available); 
      userPresence.setStatus("Hello CCM!"); 
      userPresence.setPriority(24); 
      userPresence.setMode(userPresence.getMode()); 
      connection.sendPacket(userPresence); 

在這裏,我總是在user.getMode() NULL,也總是得到地位可用(在Openfire的門戶網站所示)

有人請幫助?

回答

1

userPresence.setMode(userPresence.getMode())對我來說似乎沒有任何作用。

你應該存儲在設備本身(SharedPreferences如)

+0

好了,這是唯一的最後一個選項做同樣對先前的模式? –

+0

這裏我的問題是如何Gtalk管理同樣的事情,沒有本地保存存在信息? 如果用戶使用相同的憑據登錄到其他設備會發生什麼情況?如果存在信息存儲在本地,那麼它如何更新到用戶現在登錄的新移動設備? –

+1

讓我們試着準確:存在(可用)不應該存儲在本地。 Presence數據包可能包含1)屬性(dnd,away,chat和xa),它們映射到setMode Smack api。 2)這是一個文本字符串。如果服務器堅持這些,我會感到驚訝,但你可以通過以下方式來測試:a)使用userA登錄並將狀態設置爲「ABC」並再次註銷b)使用userB登錄(假設A和B是朋友)並查看是否用戶B的輸入狀態數據包包含此狀態字符串 –