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
Post a Comment