关于这方面的资料网上有很多,在自己做项目的时候,发现不同的后台处理方式,直接导致android端的链接成功与否。后来终于在GitHub上找到了一个可以与后台成功连接的demo,整理成一个service就可以直接用。
1.先在build.gradle中导入
compile (‘io.socket:socket.io-client:0.8.3’) {
exclude group: ‘org.json’, module: ‘json’
}
2.直接开启service就可以用,记得在AndroidManifest中注册自己的service
Intent intent = new Intent(this, WebSocketService.class);
startService(intent);
public class WebSocketService extends Service{
private Socket mSocket;
private final String TAG = this.getClass().getSimpleName();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG,"创建WebSocket:");
initWebSocket();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
mSocket.disconnect();
/*可以指定关闭单个Emitter.Listener,也可以一次性全部关闭*/
// mSocket.off(Socket.EVENT_CONNECT, onConnect);
// mSocket.off(Socket.EVENT_DISCONNECT, onDisconnect);
// mSocket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);
// mSocket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.off();
Log.i(TAG,"WebSocket销毁了:");
}
private void initWebSocket() {
if (mSocket == null) {
try {
/*输入相对于的地址,开头肯定是http,否则会报错*/
mSocket = IO.socket("http://lin.f3322.net:82");
} catch (URISyntaxException e) {
e.printStackTrace();
}
mSocket.on(Socket.EVENT_CONNECT, onConnect);
mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
mSocket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
mSocket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
mSocket.on("/push/lin/40", new Emitter.Listener() { //监听回调函数
@Override
public void call(Object... args) {
}
});
mSocket.connect();
}
}
private Emitter.Listener onConnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.i(TAG," WebSocket连接:" + Arrays.toString(args));
}
};
private Emitter.Listener onDisconnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.i(TAG," WebSocket断开:" + Arrays.toString(args));
}
};
private Emitter.Listener onConnectError = new Emitter.Listener() {
@Override
public void call(Object... args) {
Log.i(TAG,"WebSocket连接异常:" + Arrays.toString(args));
/*如果想长连接,则不用关闭service*/
stopSelf();
}
};
}
参考的GitHub上的demo:https://github.com/nkzawa/socket.io-android-chat