java - Android WebSocket Services making multiple connections -


i have created web socket service. keeping making multiple connection

i want app make 1 connection, unless network connection drops make another. right now, makes 1 connection, if press home button on phone. , go on app, make connection.

thanks guys .

oncreate... of mainactivity

intent startserviceintent = new intent(this, websocketservices.class);         startservice(startserviceintent); 

manifest

<!-- websocket --> <receiver      android:name="com.example.basicplayerapp.core.networkreceiver">    <intent-filter >        <action android:name="android.net.conn.connectivity_change" />        <action android:name="android.intent.action.boot_completed" />    </intent-filter>  </receiver> <service android:name="com.example.basicplayerapp.core.websocketservices"></service> 

networkreceiver

public class networkreceiver extends broadcastreceiver {     public static final string tag = homeactivity.class.getsimplename();      @override     public void onreceive(context context, intent intent) {                  connectivitymanager conn =  (connectivitymanager)context.getsystemservice(context.connectivity_service);         networkinfo networkinfo = conn.getactivenetworkinfo();          if (networkinfo != null && networkinfo.getdetailedstate() == networkinfo.detailedstate.connected) {             log.i(tag, "connected");              intent startserviceintent = new intent(context, websocketservices.class);             context.startservice(startserviceintent);          }          else if(networkinfo != null){             networkinfo.detailedstate state = networkinfo.getdetailedstate();             log.i(tag, state.name());         }         else {             log.i(tag, "lost connection");          }       }//end onreceive     };//end networkreceiver 

websocketservices

public class websocketservices extends intentservice {     public static final string tag = websocketservices.class.getsimplename();      private static  string socket_addr = "http://171.0.0.1:8080";     private string message = null;     private websocket socket = null;      public websocketservices() {         super("downloadservice");     }       @override     protected void onhandleintent(intent intent) {         log.i(tag, "onhandleintent");          //socket_addr = intent.getstringextra("ip");          if(socket==null || !socket.isopen() || socket.ispaused())         connecttopasocket(socket_addr);          log.d(tag,"service invoke function");     }//end onhandleintent           //=====================================================================================     // socket connection      //=====================================================================================      private void connecttopasocket(string socket_addr) {         log.i(tag, "connecttopasocket()");          // checking         if (socket != null && socket.isopen()) return;           // initiate web socket connection         asynchttpclient.getdefaultinstance().websocket(socket_addr, null,                 new asynchttpclient.websocketconnectcallback() {                     @override                     public void oncompleted(exception ex, websocket websocket) {                         log.i(tag, "oncompleted");                          if (ex != null) {                             log.i(tag, "oncompleted > if (ex != null)");                             ex.printstacktrace();                             return;                         }                          socket = websocket;                         socket.setstringcallback(new stringcallback() {                             public void onstringavailable(string s) {                                 log.i(tag, "socket.setstringcallback > onstringavailable - s => " + s);                                  system.out.println("i got string: " + s);                                 message = s;                                }// end onstringavailable                         });// end socket.setstringcallback                          socket.setdatacallback(new datacallback() { // find out                             @override                             public void ondataavailable(dataemitter emitter, bytebufferlist bb) {                                 log.i(tag, "socket.setdatacallback > ondataavailable | emitter=> " + emitter + " | bb => " + bb);                                  system.out.println("i got bytes!");                                 // note data has been read                                 bb.recycle();                             }                         });// end websocket.setdatacallback                      }// end oncompleted                 });// end asynchttpclient.getdefaultinstance()     }// end connecttopasocket }//end websocketservices 

mrt, had similar probelm.

dont use intentservice. use service. because once intentservice has been done, finish itself.

after change service, can do, use boolean check if service has been started so:

boolean issockestarted = false;      @override   public int onstartcommand(intent intent, int flags, int startid) { ...           if (socket == null || !socket.isopen() || socket.ispaused()) {              if (issockestarted) { //not started             } else {                 issockestarted = true;             }         } .... 

that mean, service start once. until kill manually.

it worked me, try , let me know.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

gradle error "Cannot convert the provided notation to a File or URI" -