Conectar la aplicación android a un servidor sockjs
Estoy trabajando en una aplicación androide nativa, tengo que conectar mi aplicación al servidor Sockjs. Intenté conectar con Socket.IO, Autobahn, WebSockets, pero su conexión no. ¿Hay algún cliente de sockjs para android? Por favor ayuda, gracias.
Socket.IO:
- Aplicación de Android que trabaja en WIFI y 3G (Sin proxy), pero no funciona en 3G (Si proxy y puerto están asignados)
- ¿Qué eventos pueden despertar un dispositivo Android durmiente?
- Android trata con dispositivos IoT sin conexión a Internet
- Comunicación de socket con Python en Android
- Múltiples hilos de lectura desde el mismo socket
private void connectToSocket(String serverUrl, String accessKey) { IO.Options opts = new IO.Options(); opts.forceNew = true; opts.reconnection = true; //opts.query = "accessKey="+accessKey; String host = serverUrl; try { mSocket = IO.socket(host, opts); } catch (URISyntaxException e) { e.printStackTrace(); } mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError); mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError); mSocket.on(Socket.EVENT_CONNECT, onConnect); mSocket.on("new message", onNewMessage); mSocket.connect().emit("accessKey", accessKey); if (mSocket.connected()) { Log.d("SocketMsg: ", "Connected"); } } private Emitter.Listener onConnect = new Emitter.Listener() { @Override public void call(final Object... args) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Log.d("SocketMsg: ", args[0].toString()); //mSocket.emit("accessKey", accessKey); Toast.makeText(MainActivity.this.getApplicationContext(), "Connect", Toast.LENGTH_LONG).show(); for (Object o : args) { Log.i("IO " + Socket.EVENT_CONNECT_ERROR, o.toString()); } } }); } }; private Emitter.Listener onConnectError = new Emitter.Listener() { @Override public void call(final Object... args) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Log.d("SocketMsg: ", args[0].toString()); Toast.makeText(MainActivity.this.getApplicationContext(), "Error", Toast.LENGTH_LONG).show(); for (Object o : args) { Log.i("IO " + Socket.EVENT_CONNECT_ERROR, o.toString()); } } }); } };
Su "error de encuesta xhr"
- Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
- Uso de Socket.IO en Android siempre devuelve error de sondeo XHR
- ¿Cómo crear socket Raw en Android?
- Android: Socket - java.net.SocketException: sendto ha fallado: EPIPE (Broken pipe)
- ¿Cómo administrar una conexión Bluetooth en Android a través de cambios de configuración?
- FIXED: No se puede conectar a adb a través de wifi
- ¿Cómo obtener datos desde / hacia un socket en un hilo?
- Problema al conectar la aplicación de Android al socket mediante la conexión de celda
Ahora conectado con éxito a SockJS usando el siguiente truco :).
1. Place a web view and set its visibility to gone. 2. Use SockJS client in webview. 3. Create a javascript Interface that send data back to native code when get data from socket. 4. We have to call the function only once from native code.
JavaScript Interace:
public class WebAppInterface { Context mContext; /** * Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** * Show a toast from the web page */ @JavascriptInterface public void msg(final String toast) { Log.d("msg: ", toast); if (toast.contains("{")) createMarkerList(toast); } }
SockJS Client en Webview:
<script type="text/javascript"> function connectToSocket(url, accessKey){ Android.msg(String("called")); var sock = new SockJS("http://api.example.in:8182/realtime"); sock.onopen = function() { Android.msg("open"); sock.send(JSON.stringify({ key: accessKey })); }; sock.onclose = function() { Android.msg("close"); }; sock.onmessage = function(e) { result = e.data.replace(/,\s*$/, ''); Android.msg(String(result)); }; sock.onerror = function(e) { Android.msg("error"); }; } </script>
Llamando a la función js:
webView.loadUrl(javascript:connectToSocket(url, accessKey));
Le sugiero que use socket.io
.
Hay una buena muestra para el cliente y el servidor en el blog Socket.io