😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。
😊 座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍
通过 OKHttp 请求库实现,在 OKhttp 中,通过 Websocket 类支持 WebSocket 通信。
总共分为以下几步:
-
添加依赖
dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' }
-
添加权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET" />
-
创建 OKHttpClient 对象
新建 java 文件,名为 myWebSocketClient,并创建OKHttpClient对象OkHttpClient client = new OkHttpClient();
-
创建请求,并输入websocket地址
Request request = new Request.Builder().url("ws://100.100.34.115:8000").build();
-
添加 WebSocketListener 监听
WebSocketListener listener = new WebSocketListener() { //@NonNull Response response) @Override public void onOpen(WebSocket webSocket, Response response) { super.onOpen(webSocket, response); webSocket.send("我是Android端,我连接成功啦"); webSocket.send("我是Android端,我要开始发送设备信息啦"); handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { ToastUtils.showConnectionError(mContext); } }); //连接成功时的处理 deviceInfoUtils = new DeviceInfoUtils(); deviceInfoJson = deviceInfoUtils.getDeviceInformationAsJson(); // 发送设备信息给服务器 webSocket.send(deviceInfoJson); } @Override public void onMessage(WebSocket webSocket, String text) { super.onMessage(webSocket, text); // 接收到消息时的处理 } @Override public void onClosed(WebSocket webSocket, int code, String reason) { super.onClosed(webSocket, code, reason); // 连接关闭时的处理 } @Override public void onFailure(WebSocket webSocket, Throwable t, Response response) { super.onFailure(webSocket, t, response); Log.e("WebSocket","连接失败" +t.getMessage()); handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(mContext, "连接WebSocket失败", Toast.LENGTH_SHORT).show(); } }); if(!isReconnecting) { isReconnecting = true; handler.postDelayed(new Runnable() { @Override public void run() { connectWebSocket(); Log.i("重连","正在重连请稍后"); Toast.makeText(mContext, "正在重连,请稍后", Toast.LENGTH_SHORT).show(); isReconnecting = false; } },5000); } } }; webSocket = client.newWebSocket(request, listener);
-
关闭连接逻辑
public void disconnectWebSocket() { if (webSocket != null) { webSocket.cancel(); } }
-
在合适的地方调用
WebSocketClient
我是在MainActivity.java
文件中的onCreate()
方法中使用。因为我是逻辑需要,所以创建了一个myWebSocketClient
构造方式,当然你们也可以省略。context = getApplicationContext(); myWebSocketClient = new myWebSocketClient(context); myWebSocketClient.connectWebSocket();