1

IMメッセンジャーを開発するために、Android用のSmack XMPPクライアントを使用しています。こんな感じにしたい ユーザーログイン時 バックグラウンドサービスで XMPPConnection 参照オブジェクトに PackerListener をアタッチしたい。xmppCon.addPacketListener (……) . このパケット リスナーは、着信要求 (チャット メッセージ、サブスクリプション リクエスト、グループ チャット リクエストなど) をリッスンするために使用します。このパケット リクエストを取得した後、チャット メッセージ、サブスクリプション リクエストなどのようなリクエスト タイプを識別します。チャット メッセージとチャット画面が開いている サブスクリプション リクエストの場合、その画面を送信/更新したい 保留中の UI アクティビティ画面を更新したいので、リクエストに応じてサービスから特定の UI を更新したい。問題は、サービスからアクティビティ(アクティブなアクティビティ)を更新する方法ですか? 誰でもこれを行う方法を教えてくれますか、それともより良い提案をしてくれますか? とても感謝しています…</p>

4

2 に答える 2

0

サービスクラスを作成してから、その on Start メソッドに次のコードを追加できます:-

RosterListener r1 = new RosterListener() {

                @Override
                public void presenceChanged(Presence presence) {
                    // TODO Auto-generated method stub

                    //sending the broadcast to update the expandable list view
                    //to check if any person's presence has changed.
                       sendBroadcast(new Intent(UserMenuActivity.ACTION_UPDATE));
notification("changed");

                }

                @Override
                public void entriesUpdated(Collection<String> arg0) {
                    // TODO Auto-generated method stub
                    //notification("entriesUpdated");
                }

                @Override
                public void entriesDeleted(Collection<String> arg0) {
                    // TODO Auto-generated method stub
                    //notification("entriesDeleted");
                }


                @Override
                public void entriesAdded(Collection<String> arg0) {
                    // TODO Auto-generated method stub
                    Iterator<String> it = arg0.iterator();
                    if (it.hasNext()) {
                        user = it.next();
                    }
                    /*RosterEntry entry = roster.getEntry(user);
                    if(entry.getType().toString().equalsIgnoreCase("to")){
                        int index_of_Alpha = user.indexOf("@");
                        String subID = user.substring(0, index_of_Alpha);

                        notification("Hi,"+subID+" wants to add you");
                    }       */      
                }
            };

            if (roster != null) {
                roster.setSubscriptionMode(Roster.SubscriptionMode.manual);
                System.out.println("subscription going on");
                roster.addRosterListener(r1);
            }

        } else {
            showToast("Connection lost-", 0);
        }

これは、あなたが求めていることと同じことができる方法です。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-10-23T10:53:03.980 に答える
-1

XMPP 接続を駆動するサービスは、状態が変化した場合にインテントをブロードキャストできます。その後、UI アクティビティ (またはウィジェット) をこれらのインテントに登録し、それに応じて表示を更新できます。

于 2012-10-09T08:58:35.323 に答える