我正在使用Smack XMPP客户端为Android开发IM Messenger。 我想这样做 当用户登录时,我想在后台服务中附加PackerListener和XMPPConnection引用对象。 xmppCon.addPacketListener(......)。此数据包侦听器用于侦听传入请求(可以是聊天消息,订阅请求,群聊请求等)。现在获取此数据包请求后,我确定请求类型,如聊天消息,订阅请求等等。如果是聊天消息和我的聊天屏幕打开我想发送/更新该屏幕如果它是订阅请求我想更新我的待处理UI活动屏幕,这取决于我想要从服务更新特定UI的请求。 问题是如何从服务更新活动(活动活动)? 任何人都可以指导我如何做到这一点,或者可以给我更好的建议吗? 我会非常感激......
答案 0 :(得分:0)
您可以创建一个服务类,然后在其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);
}
这就是你可以按照自己的要求做同样的事情。如有任何疑问,请随时向我询问。
答案 1 :(得分:-1)
如果状态发生变化,驱动XMPP连接的服务可以广播Intent。然后,您的UI活动(甚至是Widget)可以注册这些Intent并相应地更新它们的显示。