Я пытаюсь разработать фоновый процесс, который перехватывает сообщение XMPP и выполняет действие, я использую asmack в качестве основной библиотеки XMPP. Я полагаю, мне нужен радиовещатель, отвечающий конкретному намерению. Вопрос в том, как поднять намерение? Это должно быть возможно, поскольку эта функциональность присутствует в клиенте Google Talk. большое спасибо заранее.События XMPP на Android
ответ
Предполагаю, что мне нужен радиовещатель, отвечающий конкретному намерению.
Возможно, нет. Похоже, что aSmack - это, в основном, Smack, который не имеет ничего общего с Android, и поэтому не имеет понятия о намерениях.
Должно быть возможно, поскольку эта функциональность присутствует в клиенте Google Talk.
«Google Talk Talk» не использует Smack, AFAIK.
Если вы действительно хотите добиться такого поведения, вы можете подумать о постоянной службе фона, работающей с клиентом 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 в живых).