Реализация фоновой службы 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-соединением, может передавать намерение при изменении состояния. Ваша активность пользовательского интерфейса (или даже виджет) может затем зарегистрироваться для этих намерений и соответствующим образом обновить их отображение.