Реализация фоновой службы Android с помощью прослушивателя пакетов XMPP - PullRequest
1 голос
/ 10 декабря 2011

Я использую Smack XMPP клиент для Android для разработки IM Messenger.Я хочу сделать так, как в этом сценарии При входе пользователя в систему я хочу присоединить PackerListener с эталонным объектом XMPPConnection в фоновой службе.xmppCon.addPacketListener (……).Этот прослушиватель пакетов использует для прослушивания входящего запроса (может быть сообщение чата, запрос на подписку, запрос группового чата и т. Д.). После получения этого запроса пакета я идентифицирую тип запроса, например, сообщение чата, запрос на подписку и т. Д.сообщение чата и мой экран чата открыты. Я хочу отправить / обновить этот экран, если это запрос на подписку. Я хочу обновить ожидающий экран активности пользовательского интерфейса, чтобы в зависимости от запроса я хотел обновить конкретный пользовательский интерфейс из службы.Проблема в том, как я могу обновить активность (активную активность) из службы?Кто-нибудь может подсказать мне, как я могу это сделать, или может дать мне лучшее предложение для этого?Я буду очень благодарен ...

Ответы [ 2 ]

0 голосов
/ 23 октября 2012

Вы можете создать класс обслуживания, и после этого в методе 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);
        }

Вот как вы можете делать то же самое, о чем просите. Пожалуйста, не стесняйтесь задавать мне любые вопросы относительно того же.

0 голосов
/ 09 октября 2012

Служба, которая управляет вашим XMPP-соединением, может передавать намерение при изменении состояния.Ваша активность в пользовательском интерфейсе (или даже в виджете) может затем зарегистрироваться для этих намерений и соответствующим образом обновить их отображение.

...