Android 如何在聊天时使用xmpp在设备之间发送文件

Android 如何在聊天时使用xmpp在设备之间发送文件,android,asmack,Android,Asmack,谢谢你关注这个问题 我正在ejabbered和asmack_4.1库的帮助下制作一个XMPP聊天应用程序 我已经为windows安装了一个PSI客户端,用于与android设备聊天。 我能够在设备之间进行文本聊天。 我还能够将文件从设备发送到PSI客户端,并将PSI客户端发送到android设备。 但问题是要在设备之间发送文件 我正在使用以下代码发送和接收文件: 文件发送: public void fileTransfer(String filenameWithPath, Bitmap thum

谢谢你关注这个问题

我正在ejabbered和asmack_4.1库的帮助下制作一个XMPP聊天应用程序

我已经为windows安装了一个PSI客户端,用于与android设备聊天。 我能够在设备之间进行文本聊天。 我还能够将文件从设备发送到PSI客户端,并将PSI客户端发送到android设备。 但问题是要在设备之间发送文件

我正在使用以下代码发送和接收文件:

文件发送:

public void fileTransfer(String filenameWithPath, Bitmap thumbnail, String userId) {
        // FileTransferManager manager = new FileTransferManager(connection);
        FileTransferManager manager = FileTransferManager.getInstanceFor(connection);
        //    OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer("usre2@myHost/Smack");
        OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(userId + "/Admin"); // "/Good" depends on server
//        OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(userId + "/Directors-iMac");

        File file = new File(filenameWithPath);
        try {
            transfer.sendFile(file, "test_file");
        } catch (SmackException e) {
            e.printStackTrace();
        }

        while (!transfer.isDone()) {
            if (transfer.getStatus().equals(FileTransfer.Status.error)) {
                System.out.println("ERROR!!! " + transfer.getError());
            } else if (transfer.getStatus().equals(FileTransfer.Status.cancelled)
                    || transfer.getStatus().equals(FileTransfer.Status.refused)) {
                System.out.println("Cancelled!!! " + transfer.getError());
            }
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        if (transfer.getStatus().equals(FileTransfer.Status.refused) || transfer.getStatus().equals(FileTransfer.Status.error)
                || transfer.getStatus().equals(FileTransfer.Status.cancelled)) {
            System.out.println("refused cancelled error " + transfer.getError());
        } else {
            System.out.println("Success");
        }
    }
文件接收:

public void fileReciever(AbstractXMPPConnection connection) {
        //**************************************

        // Create the file transfer manager
        final FileTransferManager managerListner = FileTransferManager.getInstanceFor(connection);

        //    FileTransferNegotiator.setServiceEnabled(connection, true);
        FileTransferNegotiator negotiator = FileTransferNegotiator.getInstanceFor(connection);

        Log.i("File transfere manager", "created");

        // Create the listener
        managerListner
                .addFileTransferListener(new FileTransferListener() {
                    @Override
                    public void fileTransferRequest(FileTransferRequest request) {

                        Log.i("Recieve File", "new file transfere request  new file transfere request   new file transfere request");

                        Log.i("file request", "from" + request.getRequestor());

                        IncomingFileTransfer transfer = request.accept();

                        Log.i(RECIEVE_FILE_ALERT_DIALOG, "accepted");

                        try {

                            transfer.recieveFile(new File("/sdcard/" + request.getFileName()));

                            while (!transfer.isDone() || (transfer.getProgress() < 1)) {

                                Log.i(RECIEVE_FILE_ALERT_DIALOG, "still receiving : " + (transfer.getProgress()) + " status " + transfer.getStatus());

                                if (transfer.getStatus().equals(FileTransfer.Status.error)) {
                                    // Log.i("Error file",
                                    // transfer.getError().getMessage());
                                    Log.i("Recieve File",
                                            "cancelling still receiving : "
                                                    + (transfer.getProgress())
                                                    + " status "
                                                    + transfer.getStatus());
                                    transfer.cancel();

                                    break;
                                }
                            }

                        } /*catch (XMPPException e) {

                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }*/ catch (SmackException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                });

        //**************************************
    }

我可以将文件从Android设备发送到PSI桌面应用程序,反之亦然,但我无法在Android设备之间传输文件。

你忘了告诉我什么不起作用了。或者如果有错误或异常。请检查更新的问题。是否让我检查您的更新?请告诉我要的东西。非常不清楚。我可以将文件从Android设备发送到PSI桌面应用程序,反之亦然,但我无法在Android设备之间传输文件。是的。你以前说过的。这从一开始就很清楚。为什么你认为反复提供相同的信息会有所帮助?
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(userId + "/Admin"); // "/Good" depends on server