Реализация фоновой службы Android с помощью прослушивателя пакетов XMPP

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

2 ответа

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

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

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

Другие вопросы по тегам