Filetransfer en android a través de xmpp?
Sólo estoy tratando de transferir un archivo a través de xmpp.I estoy usando asmack lib.I estoy recibiendo la excepción a continuación.
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)
¿Alguien puede ayudarme cómo puedo hacer una transferencia de archivos en android usando asmack?
- ¿Cómo usar Smack 4.2 para conectarse a ejabberd?
- Eventos XMPP en Android
- Android xmpp cliente xabber
- Incorporación del protocolo XMPP a una aplicación de Android
- GCM XMPP CCS vs MQTT
- Todos los idiomas excepto los literales ingleses analizados en la solicitud de GCM POST
- ¿Es bueno usar sólo GCM para el desarrollo de aplicaciones de chat para android ditching XMPP?
- Autenticar a Google Talk (XMPP, Smack) mediante un authToken
- No se puede iniciar sesión en el servidor ejabberd mediante el cliente XMPP en Android
- Cómo obtener DiscussionHistory para MultiUserChat habitación usando aSmack?
- ¿Cómo crear un cliente de chat XMPP para Facebook?
- No se puede crear una sala de chat multiusuario (MUC) con la biblioteca aSmack para Android: "packet.DefaultPacketExtension no se puede convertir en paquete.MUCUser"
- Smack mensaje oyente no llamado y conexión inestable
Usted tiene que hacer un gestor de descubrimiento de servicio ficticio.
new ServiceDiscoveryManager(your XMPP connection);
Ahora esta línea no causa ningún problema.
mFileTransferManager = new FileTransferManager(your XMPP connection);
Primero, tienes que copiar un smack.properties a tu emulador android. Puede obtener smack.properties
en el sitio original de la API SMACK.
http://www.igniterealtime.org/downloads/source.jsp
Empuje smack.properties en la carpeta "/ data /".
Modifique el método initialize()
de ProviderManager.java
(está en org/jivesoftware/smack/provider
) como sigue.
Busque la línea siguiente.
Enumeration providerEnum = classLoader.getResources( "/META-INF/smack.providers");
Sustitúyalo por
Enumeration providerEnum = classLoader.getResources( "/data/smack.providers");
Espero que esto ayude
Utilice éste para la transferencia de archivos en asmack. He hecho esto y lo he comprobado. Su trabajo perfecto.
Para recibir un archivo utilice este método
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(); }
Solo pregúntame si tiene alguna pregunta sobre la transferencia de archivos en xmpp usando asmack lib.
Gracias
- Implementación de la función de chat en android
- ¿Reutilizando la galería de imágenes predeterminada de Android?