我正在使用 Android 的 Smack XMPP 客户端来开发 IM Messenger。我想做这样的场景当用户登录时,我想在后台服务中附加 PackerListener 和 XMPPConnection 引用对象。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 连接的服务可以广播 Intent。然后,您的 UI Activity(甚至是 Widget)可以注册这些 Intent 并相应地更新它们的显示。
于 2012-10-09T08:58:35.323 回答