【问题标题】:How could I send file to my other buddy on my chat app?如何在我的聊天应用程序上向我的其他好友发送文件?
【发布时间】:2015-01-15 07:19:51
【问题描述】:

我有一个聊天应用程序,我想添加向我的好友发送文件的功能,我的好友也向我发送文件。我怎么能这样做?谢谢!我的朋友在其他城市

【问题讨论】:

    标签: android iphone sockets google-app-engine xmpp


    【解决方案1】:

    尝试使用此代码通过 xmpp 向其他用户发送数据,并确保该用户必须是您的朋友并且在线,否则您将无法发送数据。

    private void sendData(File file) {
    
    
            Log.i("Sending1","sending1");
    
            try {
                progressDialog = ProgressDialog.show(ChatActivity.this.getParent(),"", "Please wait.");
                OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(secondUserName+"/Smack");
                //  String name = "DemoImage";n
                Log.i("Sending2","sending2");
    
                transfer.sendFile(file, "Demo Image");
    
                while (!transfer.isDone()) {
                    if (transfer.getStatus().equals(Status.error)) {
                        if(progressDialog != null && progressDialog.isShowing()){
                            progressDialog.cancel();
                        }
                        System.out.println("ERROR!!! " + transfer.getError());
                    } else {
                        System.out.println(transfer.getStatus());
                        System.out.println(transfer.getProgress());
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(ChatActivity.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                if(transfer.isDone()){
                    if(progressDialog != null && progressDialog.isShowing()){
                        progressDialog.cancel();
                    }
                    if(transfer.getStatus().equals(Status.error))
                    {
    
                        Constant.showToast(ChatActivity.this.getParent(), "Error in sending file please retry.");
                    }else{
    // do what you want.
    }
    
    
                }
                //transfer.sendFile(fi, "Demo Images");
                Log.i("Sending3","sending3");
                //  transfer.sendFile(new File(filePath), "You won't believe this!");  
                //transfer.sendFile(new File("shakespeare_complete_works.txt"), "You won't believe this!");
            } catch (XMPPException e) {
                // TODO Auto-generated catch block
                if(progressDialog != null && progressDialog.isShowing()){
                    progressDialog.cancel();
                }
                e.printStackTrace();
                Log.i("Sending4","sending4");
            } catch (Exception e) {
                // TODO: handle exception
                if(progressDialog != null && progressDialog.isShowing()){
                    progressDialog.cancel();
                }
                e.printStackTrace();
            } 
    
        }
    

    对于这样的文件传输配置

     private void configFileTransfer() {
    
                ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider());
                ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider());
                ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider());
    
                // Create the file transfer manager  
                manager = new FileTransferManager(XMPPSmackConnection.connection);  
                FileTransferNegotiator.setServiceEnabled(XMPPSmackConnection.connection, true);
                fileTransferListener();
    
            }
    
    private void connect() {
            if(XMPPSmackConnection.connection==null || !XMPPSmackConnection.connection.isConnected()){ 
                reConnect();
            }else{
                XMPPSmackConnection.getInstance();
                //request = new MessageEventManager(XMPPSmackConnection.connection);
                Presence presence = new Presence(Presence.Type.available);
                XMPPSmackConnection.connection.sendPacket(presence);
                setConnection(XMPPSmackConnection.getInstance().connection);
                mHandler= new Handler();
                configFileTransfer();
            }
        }
    

    并在活动的 oncreate 上调用 connect

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2012-10-26
      • 2016-07-18
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多