2011-01-12 3 views
4

XMPP 메시지를 가로 채고 작업을 수행하는 백그라운드 프로세스를 개발하려고합니다. 주 XMPP 라이브러리로 asmack을 사용하고 있습니다. 특정 의도에 응답하는 broadcastReciever가 필요하다고 생각합니다. 문제는 의도를 제기하는 것입니다. 이 기능이 Google 토크 클라이언트에 있으므로 가능해야합니다. 미리 감사드립니다.Android의 XMPP 이벤트

답변

1

특정 의도에 응답하는 broadcastReciever가 필요합니다.

아마도 그렇지 않습니다. aSmack은 주로 Android와 관련이없는 Smack 인 것으로 보이므로 인 텐트에 대한 개념이 없습니다.

Google 토크 클라이언트에는이 기능이 있어야합니다.

"google talk client"는 AFAIK를 사용하지 않습니다.

2

이 동작을 실제로 수행하려는 경우 asmack XMPP 클라이언트를 실행하는 영구 백그라운드 서비스에 대해 생각할 수 있습니다. XMPP 클라이언트의 리스너 메소드 (즉, processPacket)가 의도를 발생시킬 수 있습니다. 그러면 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); 

또한 의도를 수신 XMPP를 통해 보내는 브로드 캐스트 리시버 (또는 IntentService)를 작성하여 다른 통신 방향을 구현하기 위해 시도 할 수 있습니다. BackgroundReceiver는 각 메시지에 대해 느리지 만 에너지를 절약 할 수있는 새로운 연결을 만들어야합니다 (XMPP 세션을 유지할 필요가 없습니다).