【问题标题】:Sending files with asmack (or any alternatives)使用 asmack(或任何替代方法)发送文件
【发布时间】:2012-10-29 10:01:57
【问题描述】:

我正在尝试发送带有asmack 的文件,其中包含以下内容:

// mConn is an XMPPConnection
FileTransferManager  manager = new FileTransferManager(mConn);
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("operator@domain.corp");
transfer.sendFile(new File(fname), "File for the operator");

我没有收到任何异常,但在 smack 日志中我可以看到

<error type="cancel" code="501"><feature-not-implemented...

有谁知道问题的根源是什么?

由于asmack已经有一段时间没有更新了,也许还有其他替代品?

【问题讨论】:

标签: android xmpp asmack


【解决方案1】:

我终于明白了。而不是

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("operator@domain.corp");

现在我用

String to = mConn.getRoster().getPresence("operator@domain.corp").getFrom();
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(to);

它就是这样工作的。

【讨论】:

    【解决方案2】:

    您必须初始化以下内容。

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

    通常我们调用以下方法来初始化提供程序。

    public void configure(ProviderManager pm) {
    
        // Private Data Storage
        pm.addIQProvider("query", "jabber:iq:private",
                new PrivateDataManager.PrivateDataIQProvider());
    
        // Time
        try {
            pm.addIQProvider("query", "jabber:iq:time",
                        Class.forName("org.jivesoftware.smackx.packet.Time"));
        } catch (ClassNotFoundException e) {
            Log.w("TestClient",
                    "Can't load class for org.jivesoftware.smackx.packet.Time");
        }
    
        // Roster Exchange
        pm.addExtensionProvider("x", "jabber:x:roster",
                new RosterExchangeProvider());
    
        // Message Events
        pm.addExtensionProvider("x", "jabber:x:event",
                new MessageEventProvider());
    
        // Chat State
        pm.addExtensionProvider("active",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        pm.addExtensionProvider("composing",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        pm.addExtensionProvider("paused",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        pm.addExtensionProvider("inactive",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
        pm.addExtensionProvider("gone",
                "http://jabber.org/protocol/chatstates",
                new ChatStateExtension.Provider());
    
        // XHTML
        pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",
                new XHTMLExtensionProvider());
    
        // Group Chat Invitations
        pm.addExtensionProvider("x", "jabber:x:conference",
                new GroupChatInvitation.Provider());
    
        // Service Discovery # Items
        pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",
                new DiscoverItemsProvider());
    
        // Service Discovery # Info
        pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",
                new DiscoverInfoProvider());
    
        // Data Forms
        pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
    
        // MUC User
        pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",
                new MUCUserProvider());
    
        // MUC Admin
        pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",
                new MUCAdminProvider());
    
        // MUC Owner
        pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",
                new MUCOwnerProvider());
    
        // Delayed Delivery
        pm.addExtensionProvider("x", "jabber:x:delay",
                new DelayInformationProvider());
    
        // Version
        try {
            pm.addIQProvider("query", "jabber:iq:version",
                    Class.forName("org.jivesoftware.smackx.packet.Version"));
        } catch (ClassNotFoundException e) {
            // Not sure what's happening here.
        }
    
        // VCard
        pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
    
        // Offline Message Requests
        pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
                new OfflineMessageRequest.Provider());
    
        // Offline Message Indicator
        pm.addExtensionProvider("offline",
                "http://jabber.org/protocol/offline",
                new OfflineMessageInfo.Provider());
    
        // Last Activity
        pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
    
        // User Search
        pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
    
        // SharedGroupsInfo
        pm.addIQProvider("sharedgroup",
                "http://www.jivesoftware.org/protocol/sharedgroup",
                new SharedGroupsInfo.Provider());
    
        // JEP-33: Extended Stanza Addressing
        pm.addExtensionProvider("addresses",
                "http://jabber.org/protocol/address",
                new MultipleAddressesProvider());
    
        // FileTransfer
        pm.addIQProvider("si", "http://jabber.org/protocol/si",
                new StreamInitiationProvider());
    
        pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",
                new BytestreamsProvider());
    
        // Privacy
        pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
        pm.addIQProvider("command", "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider());
        pm.addExtensionProvider("malformed-action",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.MalformedActionError());
        pm.addExtensionProvider("bad-locale",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadLocaleError());
        pm.addExtensionProvider("bad-payload",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadPayloadError());
        pm.addExtensionProvider("bad-sessionid",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.BadSessionIDError());
        pm.addExtensionProvider("session-expired",
                "http://jabber.org/protocol/commands",
                new AdHocCommandDataProvider.SessionExpiredError());
    }
    

    将此方法称为

    配置(ProviderManager.getInstance());

    在创建 XMPPConnection 之前。如需更多参考,请使用此链接。

    http://www.igniterealtime.org/builds/smack/docs/latest/documentation/extensions/index.html

    【讨论】:

    • 没有帮助...我一直在阅读有关在 ProviderManager.java 中替换 smack.providers 文件的路径,但不知道具体如何。我的意思是,我这样做了,但似乎也无济于事。我需要这样做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多