Android 上的 XMPP 事件

Posted

技术标签:

【中文标题】Android 上的 XMPP 事件【英文标题】:XMPP events on Android 【发布时间】:2011-01-12 11:55:35 【问题描述】:

我正在尝试开发一个拦截 XMPP 消息并执行操作的后台进程,我使用 asmack 作为主 XMPP 库。我想我需要一个响应特定意图的广播接收器。问题是如何提高意图?它必须是可能的,因为此功能存在于 google talk 客户端中。 提前谢谢了。

【问题讨论】:

【参考方案1】:

如果您真的想实现这种行为,您可能会考虑运行 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 会话处于活动状态)。

【讨论】:

【参考方案2】:

我想我需要一个能响应特定意图的广播接收器。

可能不会。 aSmack 似乎主要是 Smack,与 android 无关,因此没有 Intents 的概念。

这必须是可能的,因为此功能存在于 google talk 客户端中。

“google talk 客户端”不使用 Smack,AFAIK。

【讨论】:

以上是关于Android 上的 XMPP 事件的主要内容,如果未能解决你的问题,请参考以下文章

我正在寻找适用于 Android 的 BOSH XMPP 库

将 XMPP 与 .net 服务器和 android 客户端一起使用

android XMPP、SIP 或 UPD 流上的两路视频?

如何使用 Openfire 和 XMPP 在 Android 中制作聊天机器人应用程序

XMPP 上的群聊推送通知

ASmack 上的叮当声 - XMPP