XMPP события на Android - PullRequest
       14

XMPP события на Android

4 голосов
/ 12 января 2011

Я пытаюсь разработать фоновый процесс, который перехватывает сообщение XMPP и выполняет действие, я использую asmack в качестве основной библиотеки XMPP. Я предполагаю, что мне нужен широковещательный приемник, который отвечает определенным намерениям. Вопрос в том, как поднять намерение? Это должно быть возможно, так как эта функция присутствует в клиенте Google Talk. Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

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

1 голос
/ 12 января 2011

Полагаю, мне нужен широковещательный приемник, который отвечает на конкретное намерение.

Вероятно, нет.Похоже, что aSmack в основном Smack, который не имеет ничего общего с Android, и поэтому не имеет понятия Intents.

Это должно быть возможно, поскольку эта функция присутствует в клиенте Google Talk.

«Клиент Google Talk» не использует Smack, AFAIK.

...