android - 在Android中使用asmack接收文件

标签 android xmpp file-transfer smack asmack

我正在尝试使用 asmack jar 接收文件。我可以在 Android 设备上毫无问题地接收文本,但是当我设置文件传输时,我收到一条错误消息,提示“不支持文件传输”。监听器永远不会被调用...我这样设置监听器:

if (m_connection != null)
        {

            ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
            if (sdm == null)
            {
                sdm = new ServiceDiscoveryManager(connection);
                sdm.addFeature("http://jabber.org/protocol/disco#info");
                sdm.addFeature("jabber:iq:privacy");
            }

            // new ServiceDiscoveryManager(connection);
            FileTransferNegotiator.setServiceEnabled(connection, true);
            FileTransferManager manager = new FileTransferManager(m_connection);
            manager.addFileTransferListener(new FileTransferListener() {
                public void fileTransferRequest(final FileTransferRequest request)
                {

                    Log.i("InstallerActivity", "Got new File!!!");

编辑:添加这些以使其工作:

pm.addIQProvider("si", "http://jabber.org/protocol/si", new StreamInitiationProvider());

    pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
    pm.addIQProvider("open", "http://jabber.org/protocol/ibb", new IBBProviders.Open());
    pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new IBBProviders.Close());
    pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new IBBProviders.Data());
    pm.addIQProvider("open", "http://jabber.org/protocol/ibb", new OpenIQProvider());
    pm.addIQProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider());
    pm.addIQProvider("close", "http://jabber.org/protocol/ibb", new CloseIQProvider());
    pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider());

最佳答案

您是否为FileTransfer添加了IQProvider功能?

// //File transfer
    pm.addIQProvider("si", "http://jabber.org/protocol/si",
            new StreamInitiationProvider());
    pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
            new BytestreamsProvider());
    pm.addIQProvider("open", "http://jabber.org/protocol/ibb",
            new OpenIQProvider());
    pm.addIQProvider("close", "http://jabber.org/protocol/ibb",
            new CloseIQProvider());
    pm.addExtensionProvider("data", "http://jabber.org/protocol/ibb",
            new DataPacketProvider());

这是非常有用的使用asmack进行文件传输的教程。 File transfer in android with asmack and Openfire

关于android - 在Android中使用asmack接收文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567660/

相关文章:

django - Django 上的 XMPP/Jabber(聊天服务器)

java - 简单的Java文件传输程序问题

android - 如何在Windows XP上挂载Android文件系统

android - 如何在 Tabhost 和 Activity 之间进行通信

Android - 通过软键盘输入在 Canvas 上绘制文本

java - 如何在 Openfire 上接收消息传递回执?

mysql - erlang mysql 结果到 xml

java - 在Android中将方法从Void更改为Return?

objective-c - 将小视频从一台 iOS 设备发送到另一台设备的最快方法是什么?

java - 文件传输xmpp中主机="null"