java - How to establish a WebSocket connection in android service? -


i've been trying create android service allow me maintain websocket connection , send data time time. create handler in service connect websocketclient. not connecting. url working , have tested too. highly appreciate if can help.

main activity.java

import android.app.activity; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.content.intentfilter; import android.os.bundle; import android.view.view; import android.widget.textview;   public class mainactivity extends activity {      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);          broadcastreceiver receiver=new broadcastreceiver() {      @override         public void onreceive(context context, intent intent) {             textview text=(textview) findviewbyid(r.id.textview);             text.settext(intent.getstringextra("msg"));          }     };      registerreceiver(receiver, new intentfilter(socketservice.broadcast_action));      }       // method start service     public void startservice(view view) {         startservice(new intent(getbasecontext(), socketservice.class));     }      // method stop service     public void stopservice(view view) {         stopservice(new intent(getbasecontext(), socketservice.class));     }    } 

service implementation

import android.app.service; import android.content.broadcastreceiver; import android.content.intent; import android.os.handler; import android.os.ibinder; import android.util.log; import android.widget.toast;  import org.java_websocket.client.websocketclient; import org.java_websocket.handshake.serverhandshake;  import java.net.uri;  import java.util.logging.logrecord;  public class socketservice extends service {      boolean status=false;     public static final string broadcast_action = "com.supun.broadcasttest";     broadcastreceiver broadcaster;     broadcastreceiver broadreciever;     intent intent;     handler handler;     websocketclient client;      @override     public ibinder onbind(intent intent) {         return null;     }      @override     public void oncreate() {         super.oncreate();         intent=new intent(broadcast_action);         handler=new handler();      }      @override     public int onstartcommand(final intent intent, int flags, int startid) {          toast.maketext(this, "service started",toast.length_long).show();// let continue running until stopped.          ////////////////////////////////////////////////////////////////////////////////           try {             client = new websocketclient(new uri(                     "ws://xxxxxxx-xxxx.rhcloud.com:8000/browser")) {                  @override                  public void onopen(serverhandshake handshakedata) {                     log.d("1", "open");                     status = true;                  }                  @override                 public void onmessage(string message) {                       log.d("reply", message);                     intent.putextra("msg", message);                     sendbroadcast(intent);                  }                  @override                 public void onerror(exception ex) {                      // todo auto-generated method stub                  }                  @override                 public void onclose(int code, string reason, boolean remote{                     status = false;                  }             };             }catch(exception e){           }             ///////////////////////////////////////////////////////////////////////////////  //         handler.removecallbacks(runnable);         handler.postdelayed(runnable, 1000);         return start_sticky;     }         private runnable runnable=new runnable() {         @override         public void run() {             client.connect();              for(int i=0; i<5;i++){                 if(status){                     intent.putextra("msg","open");                     sendbroadcast(intent);                     break;                 }else{                     try {                         intent.putextra("msg",client.getreadystate().tostring());                         sendbroadcast(intent);                         thread.sleep(1000);                      } catch (interruptedexception e) {                         e.printstacktrace();                     }                 }             }              if (!status) {                 intent.putextra("msg","time out");                 sendbroadcast(intent);              }            }     };          @override     public void ondestroy() {         super.ondestroy();         toast.maketext(this, "service destroyed", toast.length_long).show();     } } 

i calling start service method in main activity button click event. output turned closing , shows timed out. wonder reason?

the websocket client ur using not robust try using engine io client used project , great performance https://github.com/nkzawa/engine.io-client.java not clients compatible server check being used on server , connection should replicated using different library on server , client leads breaking of connections


Comments