当前位置:   article > 正文

基于Android封装Java-WebSocket,开箱即食

基于Android封装Java-WebSocket,开箱即食

前置条件,build.gradle引入依赖:

implementation 'org.java-websocket:Java-WebSocket:1.4.0'

封装websocket类:

  1. public class WsHelper {
  2. private static Option option = new Option();
  3. public JWebSocketClient client;
  4. public Boolean ping_status = false;
  5. private ActivityWsCallback callback;
  6. private String TAG = "WS";
  7. public void setCallback(ActivityWsCallback callback) {
  8. this.callback = callback;
  9. }
  10. /**
  11. * 初始化websocket连接
  12. */
  13. public void initSocketClient() {
  14. URI uri = URI.create(option.WSUri);
  15. Logger.e("开始ws连接");
  16. client = new JWebSocketClient(uri) {
  17. @Override
  18. public void onMessage(String message) {
  19. handleMessage(message);
  20. }
  21. @Override
  22. public void onOpen(ServerHandshake handshakedata) {
  23. Log.e(TAG, "websocket连接成功");
  24. msgData sn = new msgData();
  25. sn.setSn(getDeviceSN());
  26. msg obj = new msg();
  27. obj.setCommand("init");
  28. obj.setData(sn);
  29. String str = JSON.toJSONString(obj);
  30. sendMsg(str);
  31. heartBeatRunnable.run();
  32. }
  33. @Override
  34. public void onError(Exception ex) {
  35. super.onError(ex);
  36. Log.e(TAG,"websocket连接错误:" + ex);
  37. ping_status = false;
  38. }
  39. @Override
  40. public void onClose(int code, String reason, boolean remote) {
  41. super.onClose(code, reason, remote);
  42. Log.e("ws", "websocket断开连接:·code:" + code + "·reason:" + reason + "·remote:" + remote);
  43. ping_status = false;
  44. }
  45. };
  46. connect();
  47. }
  48. //消息发送
  49. public void sendMsg(String msg) {
  50. if (null != client && client.isOpen()) {
  51. client.send(msg);
  52. } else {
  53. ping_status = false;
  54. }
  55. }
  56. /**
  57. * 连接websocket
  58. */
  59. private void connect() {
  60. if (client.isOpen()) {
  61. return;
  62. }
  63. client.connect();
  64. }
  65. //心跳检测
  66. private static final long HEART_BEAT_RATE = 5 * 1000;
  67. private Handler mHandler = new Handler();
  68. //心跳检测
  69. private Runnable heartBeatRunnable = new Runnable() {
  70. @Override
  71. public void run() {
  72. mHandler.removeCallbacks(heartBeatRunnable);
  73. if (client != null) {
  74. if (client.isClosed()) {
  75. Log.e(TAG, "关闭状态");
  76. reconnectWs();//心跳机制发现断开开启重连
  77. } else {
  78. //发送消息
  79. msgData sn = new msgData();
  80. sn.setSn(getDeviceSN());
  81. msg obj = new msg();
  82. obj.setData(sn);
  83. if (client.isOpen()) {
  84. obj.setCommand("ping");
  85. sendMsg(JSON.toJSONString(obj));
  86. } else {
  87. Log.e(TAG, "异常");
  88. ping_status = false;
  89. reconnectWs();//心跳机制发现断开开启重连
  90. }
  91. }
  92. } else {
  93. Log.e("", "没有初始化");
  94. //如果client已为空,重新初始化连接
  95. initSocketClient();
  96. }
  97. mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);
  98. }
  99. };
  100. //开启重连
  101. private void reconnectWs() {
  102. Log.e("", "正在重连");
  103. initSocketClient();
  104. }
  105. public static String getDeviceSN() {
  106. String serialNumber = android.os.Build.SERIAL;
  107. return serialNumber;
  108. }
  109. public class msg {
  110. private String command;
  111. private msgData data;
  112. public msgData getData() {
  113. return data;
  114. }
  115. public String getCommand() {
  116. return command;
  117. }
  118. public void setCommand(String command) {
  119. this.command = command;
  120. }
  121. public void setData(msgData data) {
  122. this.data = data;
  123. }
  124. }
  125. public class msgData {
  126. private String sn;
  127. private String data;
  128. public void setData(String data) {
  129. this.sn = data;
  130. }
  131. public String getSn() {
  132. return sn;
  133. }
  134. public void setSn(String sn) {
  135. this.sn = sn;
  136. }
  137. }
  138. /**
  139. * 处理收到的消息
  140. * @param message 收到的消息
  141. */
  142. private void handleMessage(String message) {
  143. // 调用回调接口的方法,将消息传递给调用方
  144. if (callback != null) {
  145. callback.onMessageReceived(message);
  146. }
  147. }
  148. }

定义回调接口 :

  1. public interface ActivityWsCallback {
  2. void onMessageReceived(String message);
  3. }

使用:

  1. public class YourActivity implements ActivityWsCallback {
  2. private WsHelper wsHelper;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. // 初始化 WsHelper
  7. wsHelper = new WsHelper();
  8. wsHelper.initSocketClient();
  9. // 设置回调
  10. wsHelper.setCallback(this);
  11. }
  12. // 实现回调接口的方法,处理收到的消息
  13. @Override
  14. public void onMessageReceived(String message) {
  15. // 在这里处理收到的消息
  16. Log.d(TAG, "Received message: " + message);
  17. }
  18. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/383743
推荐阅读
相关标签
  

闽ICP备14008679号