How to send file between device using xmpp while chat

怎甘沉沦 提交于 2019-12-24 07:30:07

问题


Thanks for paying attention over the question...

I am making a XMPP chat application with the help of ejabbered and asmack_4.1 library.

I have installed a PSI client for windows to chat with the android device. I am able to perform text chat between devices. I am also able to send file from device to PSI client and PSI client to android device. But the problem is to send files device to device.

I am using below code to send and receive files :

File send :

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");
        }
    }

File Receiving :

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();
                        }

                    }
                });

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

Note : In fileTransfer() method, I am using below line:

OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(userId + "/Admin"); // "/Good" depends on server

I am able to send files from Android device to PSI desktop application and vice versa but i am not able to transfer files between android devices.

来源:https://stackoverflow.com/questions/29889666/how-to-send-file-between-device-using-xmpp-while-chat

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!