4

XMPP メッセージを傍受してアクションを実行するバックグラウンド プロセスを開発しようとしています。メインの XMPP ライブラリとして asmack を使用しています。特定のインテントに応答する BroadcastReciever が必要だと思います。問題は、意図をどのように高めるかです。この機能は Google トーク クライアントに存在するため、可能である必要があります。よろしくお願いします。

4

2 に答える 2

2

この動作を本当に実現したい場合は、asmackXMPPクライアントを実行する永続的なバックグラウンドサービスについて考えるかもしれません。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セッションを存続させる必要はありません)。

于 2011-05-03T01:51:45.907 に答える
1

特定のインテントに応答する BroadcastReciever が必要だと思います。

おそらくそうではありません。aSmack はほとんど Smack のように見えますが、これは Android とは何の関係もないため、インテントの概念がありません。

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

「グーグルトーククライアント」は、私の知る限り、Smackを使用していません。

于 2011-01-12T13:43:36.837 に答える