話(huà)不多說(shuō),直接上代碼
首先在項(xiàng)目build.gradle中添加以下代碼
compile('io.socket:socket.io-client:0.8.3') {
// excluding org.json which is provided by Android
exclude group: 'org.json', module: 'json'
}
- 第一步,在Application 中配置全局socket
private Socket mSocket;
{
try {
//1.初始化socket.io漠酿,設(shè)置鏈接
IO.Options opts = new IO.Options();
//如果服務(wù)端使用的是https 加以下兩句代碼,文章尾部提供SSLSocket類(lèi)
opts.sslContext = SSLSocket.genSSLSocketFactory();
opts.hostnameVerifier = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
mSocket = IO.socket(Constant.SOCKET_IP, opts);
} catch (Exception e) {
}
}
- 第二步和服務(wù)器建立連接
在onCreate 建立連接
mSocket.connect();
向外部提供一個(gè)獲得socket的方法
public Socket getSocket() {
return mSocket;
}
- 第三步在BaseActivity中初始化,方便子類(lèi)使用
public void onCreate(@Nullable Bundle paramBundle) {
super.onCreate(paramBundle);
this.mPresenter = createPresenter(mPresenter);
loading = DialogUtil.getNewLoadingDialog(mFragAct);
app = MyApplication.getInstance();
spUtil = app.getmSpUtil();
mSocket = app.getSocket();
}
- 第四步在需要socket的地方監(jiān)聽(tīng)服務(wù)發(fā)送的數(shù)據(jù)或向服務(wù)器發(fā)送數(shù)據(jù)
message為監(jiān)聽(tīng)事件名
mSocket.on("message" , messageListener);//監(jiān)聽(tīng)服務(wù)端發(fā)送的數(shù)據(jù)
mSocket.emit("message", "你好");//向服務(wù)端發(fā)送數(shù)據(jù)
messageListener 接受服務(wù)器發(fā)送的數(shù)據(jù)
private Emitter.Listener messageListener = new Emitter.Listener() {
@Override
public void call(final Object... args) {
//主線程調(diào)用
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
//根據(jù)個(gè)人業(yè)務(wù)處理
}
}
});
}
};
SSLSocket,添加支持https
public class SSLSocket {
public static SSLContext genSSLSocketFactory() {
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
X509Certificate[] x509Certificates = new X509Certificate[0];
return x509Certificates;
}
}}, new SecureRandom());
return sc;
} catch (Exception localException) {
// LogHelper.e("SSLSocketFactory -> " + localException.getMessage());
}
return null;
}
}
完