1

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

talk.google.com サーバーのコードをテストしましたが、シームレスに動作しますが、直火でテストすると、常に使用不可のプレゼンス ステータスになります。openfire設定でサブスクリプションオプションを両方に設定するなど、さまざまなことを試しました。

プレゼンス ステータスを設定するための次のコードを作成しました。

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();
      } 

しかし、次のコードを実行すると、常にプレゼンス ステータスが使用不可になります。

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