1

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

于 2012-10-09T08:58:35.323 回答