Если вы действительно хотите добиться такого поведения, вы можете подумать о постоянной фоновой службе, работающей с клиентом asmack XMPP.Метод слушателя (т.е. processPacket) вашего клиента XMPP может вызвать намерение.Затем вы можете перехватить это намерение из другого приложения или из этого приложения, используя BroadcastReceiver.
final Context context = getContext(); // or getApplicationContext(). context must be final.
PacketFilter packetFilter = new MessageTypeFilter(Message.Type.chat);
connection.addPacketListener(new PacketListener() {
@Override
public void processPacket(Packet packet) {
Message message = (Message) packet;
if (message.getBody() != null) {
String from = StringUtils.parseBareAddress(message.getFrom());
Intent intent = new Intent();
intent.setAction("your.package.XMPP_PACKET_RECEIVED");
intent.putExtra("from", from);
intent.putExtra("body", message.getBody());
context.sendBroadcast(i);
}
}
}, packetFilter);
Вы также можете попытаться реализовать другое направление связи, создав BroadcastReceiver (или IntentService), который получает намерение иотправляет его через XMPP.BackgroundReceiver должен был бы создать новое соединение для каждого сообщения, которое было бы медленным, но энергосберегающим (нет необходимости поддерживать сеанс XMPP живым).