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