2011-01-12 7 views
4

私は、XMPPメッセージを傍受してアクションを実行するバックグラウンドプロセスを開発しようとしています。私はメインのXMPPライブラリとしてasmackを使用しています。私は特定の意図に応答するbroadcastRecieverが必要だと思う。疑問は、その意図をどのように引き上げるかです。この機能はGoogleトーククライアントに存在するため、これが可能でなければなりません。 多くのおかげです。AndroidでのXMPPイベント

答えて

1

私は、特定のインテントに応答するbroadcastRecieverが必要です。

おそらくそうではありません。 aSmackは主にAndroidとは関係のないSmackと思われるため、Intentsという概念はありません。

この機能はGoogleトーククライアントに存在する必要があります。

「google talk client」は、Smack、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経由で送信しBroadcastReceiver(またはIntentService)を作成することにより、他の通信方向を実装しようとすることができます。 BackgroundReceiverは、各メッセージに対して新しいコネクションを作成する必要があります。これは、低速ですが省エネルギーになります(XMPPセッションを生かし続ける必要はありません)。

関連する問題