我在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/