18

私はAndroidのxmpp/asmackを初めて使用します。

誰かがユーザーの友達のプレゼンスを得るのを手伝ってくれませんか(名簿リスト)

私はこれを使用しています:

Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();

名簿に記載されている各ユーザーの可用性ステータスを取得するには、他に何をすべきですか。

4

5 に答える 5

19

このように使用してください:

Presence availability = roster.getPresence(user);
Mode userMode = availability.getMode();

retrieveState_mode(availability.getMode(),availability.isAvailable());

public static int retrieveState_mode(Mode userMode, boolean isOnline) {
        int userState = 0;
        /** 0 for offline, 1 for online, 2 for away,3 for busy*/
        if(userMode == Mode.dnd) {
            userState = 3;
        } else if (userMode == Mode.away || userMode == Mode.xa) {   
            userState = 2;
        } else if (isOnline) {
            userState = 1;
        }
        return userState;
}

xmpp/asmack に関して問題がある場合はお知らせください

于 2013-01-22T06:55:42.793 に答える
4

このように使う

userFromServer = con.getRoster().getPresence(userID);
userState = retrieveState(userFromServer.getMode(), userFromServer.isAvailable());

public int retrieveState(Mode userMode, boolean isOnline) {
    int userState = XmppFriend.OFFLINE; // default return value
    if (userMode == Mode.dnd) {
        userState = XmppFriend.BUSY;
    } else if (userMode == Mode.away || userMode == Mode.xa) {
        userState = XmppFriend.AWAY;
    } else if (isOnline) {
        userState = XmppFriend.ONLINE;
    }
    return userState;
}
于 2013-01-22T07:02:18.147 に答える
0
ConnectToServer(){
    final ProgressDialog dialog = ProgressDialog.show(ChatWindowFragmentActivity.this,
            "Connecting...", "Please wait...", false);
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {


            // Object of XmppClient class
            XmppClient mXmppClient = new XmppClient();

            /*
             * // Create a connection ConnectionConfiguration connConfig =
             * new ConnectionConfiguration(HOST, PORT);
             */
            XMPPConnection connection = null;

            try {
                SmackAndroid.init(ChatWindowFragmentActivity.this);
                connection = mXmppClient.connectionToXmppServer();
            } catch (XMPPException e) {
                // TODO Auto-generated catch block
      //                    setConnection(null, null);
            }
            try {
                mXmppClient.loginUser(connection, USERNAME, PASSWORD);
                Log.i("XMPPChatDemoActivity",
                        "Logged in as" + connection.getUser());
                // Set the status to available
                Presence presence = new Presence(Presence.Type.available);
                connection.sendPacket(presence);

                setConnection(connection);

                Roster roster = connection.getRoster();

                 /*
                Fetch USER availability
                */


                switch (isUserAvailable(connection)){
                    case 0:
                        imgAvailability.setBackgroundColor(Color.GRAY);
                        break;
                    case 1:
                        imgAvailability.setBackgroundColor(Color.GREEN);
                        break;
                    case 2:
                        imgAvailability.setBackgroundColor(Color.YELLOW);
                        break;
                    case 3:
                        imgAvailability.setBackgroundColor(Color.RED);
                        break;
                    default:
                        break;
                }


                Collection<RosterEntry> entries = roster.getEntries();
                for (RosterEntry entry : entries) {

                    Log.d("XMPPChatDemoActivity",
                            "--------------------------------------");
                    Log.d("XMPPChatDemoActivity", "RosterEntry " + entry);
                    Log.d("XMPPChatDemoActivity",
                            "User: " + entry.getUser());
                    Log.d("XMPPChatDemoActivity",
                            "Name: " + entry.getName());
                    Log.d("XMPPChatDemoActivity",
                            "Status: " + entry.getStatus());
                    Log.d("XMPPChatDemoActivity",
                            "Type: " + entry.getType());
                    Presence entryPresence = roster.getPresence(entry
                            .getUser());

                    Log.d("XMPPChatDemoActivity", "Presence Status: "
                            + entryPresence.getStatus());
                    Log.d("XMPPChatDemoActivity", "Presence Type: "
                            + entryPresence.getType());

                    Presence.Type type = entryPresence.getType();
                    if (type == Presence.Type.available)
                        Log.d("XMPPChatDemoActivity", "Presence AVAILABLE");
                    Log.d("XMPPChatDemoActivity", "Presence : "
                            + entryPresence);
                }



            } catch (XMPPException e) {

                e.printStackTrace();
                Log.e("XMPPChatDemoActivity", "Failed to log in as "
                        + USERNAME);
                Log.e("XMPPChatDemoActivity", e.toString());
                new ShowAlert(ChatWindowFragmentActivity.this,e.getMessage(), false).show(
                        getSupportFragmentManager(), TAG);
   //                    setConnection(null, null);
            }

            dialog.dismiss();
        }
    });
    t.start();
    dialog.show();
}

そして、あなたのメソッドはその中で呼び出されました。

于 2013-05-28T12:04:28.570 に答える
0

プレゼンスからステータスなどを確認できるようになる前の私の経験として、ユーザーをサブスクライブする必要があります。

例: ユーザー A は、ユーザー B からのステータスと利用可能なステータスを確認したいと考えています。この場合、ユーザー A はユーザー B をサブスクライブする必要があります。その後、ユーザー A はユーザー B のプレゼンスを確認できます。

購読コード

try {
            roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.manual);
            String userName = responders.getUsers().get(i).getUsername();
            roster.createEntry("userB@domain", userName, null);
            Presence pres = new Presence(Presence.Type.subscribe);
            pres.setFrom("userA@domain");
            connection.sendStanza(pres);
        } catch (Exception e) {
            android.util.Log.e("tag", "unable to add contact: ", e);
        }
于 2015-12-07T16:33:38.040 に答える