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