我在Android应用程序中使用socket.io。我想保持连接状态,并且即使关闭应用程序也永远不会关闭。我创建一个这样的服务类:

public class MyService extends Service {


private static Socket socket;
{
    try {
        socket = IO.socket("http://192.168.1.52:2500");
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    }
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    socket.connect();
    return Service.START_STICKY;
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}


在我的主类中使用以下代码:

    Intent intent = new Intent(this,MyService.class);
    startService(intent);


但是套接字无法连接!

最佳答案

您必须运行Service才能保持连接活动。

服务将在后台运行,直到您停止它或系统停止它为止。
如下启动服务:

public class MyService extends Service {

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {

      connectSocket()

      return Service.START_STICKY;
  }

   private void connectSocket() {
    try {
        IO.Options options = new IO.Options();
        options.reconnection = true;

        socket = IO.socket("http://192.168.1.52:2500", options);
        socket.on(Socket.EVENT_CONNECT, onConnected);
        socket.on(Socket.EVENT_CONNECT_ERROR, onConnectionError);
        socket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectionTimout);
        socket.on(Socket.EVENT_DISCONNECT, onDisconnect);
        socket.on("Event_Key", eventCallback );
        socket.connect();
    } catch (URISyntaxException e) {
        Log.d(getClass().getSimpleName(), "Socket Connection Exception");
        e.printStackTrace();
    }

  private Emitter.Listener onConnected = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.d("SocketIO","onConnected");
    }
  };

  private Emitter.Listener onConnectionError = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.d("SocketIO","onConnectionError");
        if (!closeSocket)
            socket.connect();
    }
  };

  private Emitter.Listener onConnectionTimout = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.d("SocketIO","onConnectionTimout");
        if (!closeSocket)
            socket.connect();
    }
  };

  private Emitter.Listener onDisconnect = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.d("SocketIO","onDisconnect");
        if (!closeSocket)
            socket.connect();
    }
  };

  private Emitter.Listener eventCallback = new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        Log.d("SocketIO", "Result: "+ String.valueOf(args[0]);
    }
};

  @Nullable
  @Override
  public IBinder onBind(Intent intent) {
      return null;
  }
}

关于android - 如何在后台保持 Activity ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46128028/

10-12 00:12
查看更多