2011-01-12 2 views
4

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

ответ

1

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

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

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

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

2

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