Filetransfer in android via xmpp?

I am just trying to transfer a file via xmpp. I am using asmack lib. I am getting an exception below.

E/AndroidRuntime( 332): FATAL EXCEPTION: main E/AndroidRuntime( 332): java.lang.NullPointerException E/AndroidRuntime( 332): at org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager.enableService(Socks5BytestreamManager.java:704) E/AndroidRuntime( 332): at org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager.activate(Socks5BytestreamManager.java:696) E/AndroidRuntime( 332): at org.jivesoftware.smackx.bytestreams.socks5.Socks5BytestreamManager.getBytestreamManager(Socks5BytestreamManager.java:1 80) E/AndroidRuntime( 332): at org.jivesoftware.smackx.filetransfer.Socks5TransferNegotiator.<init>(Socks5TransferNegotiator.java:50) E/AndroidRuntime( 332): at org.jivesoftware.smackx.filetransfer.FileTransferNegotiator.<init>(FileTransferNegotiator.java:217) E/AndroidRuntime( 332): at org.jivesoftware.smackx.filetransfer.FileTransferNegotiator.getInstanceFor(FileTransferNegotiator.java:102) E/AndroidRuntime( 332): at org.jivesoftware.smackx.filetransfer.FileTransferManager.<init>(FileTransferManager.java:63) E/AndroidRuntime( 332): at org.apache.android.xmpp.XMPPClient.fileTransfer(XMPPClient.java:143) E/AndroidRuntime( 332): at org.apache.android.xmpp.XMPPClient.onClick(XMPPClient.java:200) E/AndroidRuntime( 332): at android.view.View.performClick(View.java:2408) E/AndroidRuntime( 332): at android.view.View$PerformClick.run(View.java:8816) E/AndroidRuntime( 332): at android.os.Handler.handleCallback(Handler.java:587) E/AndroidRuntime( 332): at android.os.Handler.dispatchMessage(Handler.java:92) E/AndroidRuntime( 332): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 332): at android.app.ActivityThread.main(ActivityThread.java:4627) E/AndroidRuntime( 332): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 332): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 332): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) E/AndroidRuntime( 332): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

can someone help me how can i do file transfer in android using asmack?

+4
source share
2 answers

you need to create a fake services discovery manager.

 new ServiceDiscoveryManager(your XMPP connection); 

Now this line does not cause any problems.

 mFileTransferManager = new FileTransferManager(your XMPP connection); 

First you need to copy smack.properties to your Android emulator. You can get smack.properties from the original SMACK API site.

http://www.igniterealtime.org/downloads/source.jsp

click smack.properties in the "/ data /" folder.

Change the initialize() method of the ProviderManager.java (it is in org/jivesoftware/smack/provider ) as follows.

Find the next line.

  Enumeration providerEnum = classLoader.getResources( "/META-INF/smack.providers"); 

Replace it

  Enumeration providerEnum = classLoader.getResources( "/data/smack.providers"); 

Hope for this help

+4
source

Please use this file to transfer files to asmack. I did this and checked. His work is wonderful.

to get the file use this method

 public void ReceiveFile() { Thread thread = new Thread() { public void run() { ServiceDiscoveryManager sdm = ServiceDiscoveryManager .getInstanceFor(connection); if (sdm == null) sdm = new ServiceDiscoveryManager(connection); sdm.addFeature("http://jabber.org/protocol/disco#info"); sdm.addFeature("jabber:iq:privacy"); // Create the file transfer manager final FileTransferManager managerListner = new FileTransferManager( connection); FileTransferNegotiator .setServiceEnabled(connection, true); Log.i("File transfere manager", "created"); // Create the listener managerListner .addFileTransferListener(new FileTransferListener() { public void fileTransferRequest( final 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)) { Thread.sleep(1000); Log.i("Recieve File alert dialog", "still receiving : " + (transfer.getProgress()) + " status " + transfer.getStatus()); if (transfer.getStatus().equals(Status.error)) { // Log.i("Error file", // transfer.getError().getMessage()); Log.i("Recieve File alert dialog", "cancelling still receiving : " + (transfer.getProgress()) + " status " + transfer.getStatus()); transfer.cancel(); break; } } } catch (XMPPException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }); } }; thread.start(); } 

just ask me if you have any questions regarding transferring files to xmpp using asmack lib.

thanks

+2
source

All Articles