From 51d7007fd4bcaaa771d43a745cb6728d4e6d29ae Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期五, 05 一月 2024 18:04:41 +0800
Subject: [PATCH] 2024年01月05日18:04:39

---
 app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java |   66 ++--
 app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils123.java           |   83 +++++
 app/src/main/res/layout/activity_test_main.xml                              |   15 +
 app/src/main/java/com/hdl/photovoltaic/HDLApp.java                          |   49 ++-
 app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java               |   11 
 app/src/main/res/layout/activity_test_log.xml                               |   24 +
 app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java               |    7 
 app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java              |    4 
 app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java                |    3 
 app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java      |    5 
 app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java             |   25 +
 app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java        |   16 
 app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java       |    7 
 app/src/main/java/com/hdl/photovoltaic/ui/test/TestLogActivity.java         |   89 ++++--
 app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils.java              |  381 +++++++++++++++++++++++----
 app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java      |    6 
 app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java            |   14 
 17 files changed, 618 insertions(+), 187 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
index 4514325..a61232e 100644
--- a/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
+++ b/app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -1,15 +1,8 @@
 package com.hdl.photovoltaic;
 
 import android.app.Application;
-import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.IBinder;
 import android.text.TextUtils;
-import android.util.DisplayMetrics;
 
 
 import com.hdl.hdlhttp.HxHttpConfig;
@@ -18,21 +11,22 @@
 import com.hdl.linkpm.sdk.user.callback.IOnReloginListener;
 import com.hdl.linkpm.sdk.utils.HDLSDKSPUtils;
 import com.hdl.photovoltaic.config.AppConfigManage;
+import com.hdl.photovoltaic.config.ConstantManage;
 import com.hdl.photovoltaic.config.UserConfigManage;
-import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
-import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
-import com.hdl.photovoltaic.other.HdlFileLogic;
-import com.hdl.photovoltaic.other.HdlOtaLogic;
-import com.hdl.photovoltaic.other.HdlThreadLogic;
+import com.hdl.photovoltaic.enums.NetworkType;
 import com.hdl.photovoltaic.ui.HomeLoginActivity;
 import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
 import com.hdl.photovoltaic.utils.AppManagerUtils;
 import com.hdl.photovoltaic.utils.LocalManageUtil;
+import com.hdl.photovoltaic.utils.NetworkUtils;
 import com.hdl.photovoltaic.utils.SharedPreUtils;
 import com.hdl.sdk.link.HDLLinkLocalSdk;
+import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
 import com.hdl.sdk.link.core.connect.HDLUdpConnect;
 import com.hdl.sdk.link.core.utils.QueueUtils;
 import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient;
+
+import org.greenrobot.eventbus.EventBus;
 
 import java.util.HashMap;
 import java.util.Locale;
@@ -134,9 +128,10 @@
         initSocket();
         //4.鍒濆鍖朞KHttpLog 鏄惁寮�鍚�
         setOKHttpLogOpen(isLogEnabled);
-
-
+        //鐩戝惉缃戠粶鐘舵�佸彉鍖�
+        this.networkMonitoring();
     }
+
 
     /**
      * 鍒濆鍖朒DLLinkPMSdk
@@ -223,6 +218,32 @@
 
     }
 
+    /**
+     * 鐩戝惉缃戠粶鐘舵�佸彉鍖�
+     */
+    private void networkMonitoring() {
+        NetworkUtils.init(getInstance());
+        NetworkUtils.registerNetworkStatusChangedListener(new NetworkUtils.OnNetworkStatusChangedListener() {
+            @Override
+            public void onDisconnected() {
+                BaseEventBus baseEventBus = new BaseEventBus();
+                baseEventBus.setTopic(ConstantManage.network_change_post);
+                baseEventBus.setType(NetworkType.no_network.toString());
+                baseEventBus.setData("褰撳墠鏃犵綉缁滆繛鎺�");
+                EventBus.getDefault().post(baseEventBus);
+            }
+
+            @Override
+            public void onConnected(NetworkUtils.NetworkType networkType) {
+                BaseEventBus mobile_network = new BaseEventBus();
+                mobile_network.setTopic(ConstantManage.network_change_post);
+                mobile_network.setType(networkType.toString());
+                mobile_network.setData("姝e湪浣跨敤2G/3G/4G缃戠粶/wifi");
+                EventBus.getDefault().post(mobile_network);
+            }
+        });
+    }
+
 
 //    /**
 //     * 鍒濆鍖杣ni app mqtt
diff --git a/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java b/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
index 6b8769d..aed6caf 100644
--- a/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
+++ b/app/src/main/java/com/hdl/photovoltaic/broadcast/NetworkChangeReceiver.java
@@ -13,45 +13,49 @@
 
 import org.greenrobot.eventbus.EventBus;
 
+
 /**
  * 鐩戝惉缃戠粶鐘舵�佸彉鍖栫殑骞挎挱
  */
 public class NetworkChangeReceiver extends BroadcastReceiver {
 
-
     @Override
     public void onReceive(Context context, Intent intent) {
-        ConnectivityManager connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
-        if (networkInfo != null && networkInfo.isAvailable()) {
-            switch (networkInfo.getType()) {
-                case ConnectivityManager.TYPE_MOBILE:
-                    BaseEventBus mobile_network = new BaseEventBus();
-                    mobile_network.setTopic(ConstantManage.network_change_post);
-                    mobile_network.setType(NetworkType.g_4.toString());
-                    mobile_network.setData("姝e湪浣跨敤2G/3G/4G缃戠粶");
-                    EventBus.getDefault().post(mobile_network);
-                    break;
-                case ConnectivityManager.TYPE_WIFI:
-                    BaseEventBus wif_network = new BaseEventBus();
-                    wif_network.setTopic(ConstantManage.network_change_post);
-                    wif_network.setType(NetworkType.wifi.toString());
-                    wif_network.setData("姝e湪浣跨敤wifi涓婄綉");
-                    EventBus.getDefault().post(wif_network);
-                    break;
-                default:
-                    break;
-            }
-
-        } else {
-            BaseEventBus baseEventBus = new BaseEventBus();
-            baseEventBus.setTopic(ConstantManage.network_change_post);
-            baseEventBus.setType(NetworkType.no_network.toString());
-            baseEventBus.setData("褰撳墠鏃犵綉缁滆繛鎺�");
-            EventBus.getDefault().post(baseEventBus);
-        }
+        //todo 宸茬粡鍦∟etworkUtils閲岄潰瀹炵幇
+//        ConnectivityManager connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+//        NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
+//        if (networkInfo != null && networkInfo.isAvailable()) {
+//            switch (networkInfo.getType()) {
+//                case ConnectivityManager.TYPE_MOBILE:
+//                    BaseEventBus mobile_network = new BaseEventBus();
+//                    mobile_network.setTopic(ConstantManage.network_change_post);
+//                    mobile_network.setType(NetworkType.g_4.toString());
+//                    mobile_network.setData("姝e湪浣跨敤2G/3G/4G缃戠粶");
+//                    EventBus.getDefault().post(mobile_network);
+//                    break;
+//                case ConnectivityManager.TYPE_WIFI:
+//                    BaseEventBus wif_network = new BaseEventBus();
+//                    wif_network.setTopic(ConstantManage.network_change_post);
+//                    wif_network.setType(NetworkType.wifi.toString());
+//                    wif_network.setData("姝e湪浣跨敤wifi涓婄綉");
+//                    EventBus.getDefault().post(wif_network);
+//                    break;
+//                default:
+//                    break;
+//            }
+//
+//        } else {
+//            BaseEventBus baseEventBus = new BaseEventBus();
+//            baseEventBus.setTopic(ConstantManage.network_change_post);
+//            baseEventBus.setType(NetworkType.no_network.toString());
+//            baseEventBus.setData("褰撳墠鏃犵綉缁滆繛鎺�");
+//            EventBus.getDefault().post(baseEventBus);
+//        }
 
     }
 
+}
 
-}
\ No newline at end of file
+
+
+
diff --git a/app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java b/app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java
index 864299c..7da4acd 100644
--- a/app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java
+++ b/app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java
@@ -42,7 +42,7 @@
      */
     public void onMessage(Context context, CustomMessage customMessage) {
 
-        HdlLogLogic.print("鏋佸厜--->鑷畾涔夋秷鎭洖璋�--->" + new Gson().toJson(customMessage), true);
+        HdlLogLogic.print("鏋佸厜--->鑷畾涔夋秷鎭洖璋�--->" + new Gson().toJson(customMessage), false);
     }
 
     /**
@@ -76,7 +76,7 @@
      * @param registrationId 娉ㄥ唽 id
      */
     public void onRegister(Context context, String registrationId) {
-        HdlLogLogic.print("鏋佸厜--->娉ㄥ唽鎴愬姛鍥炶皟Id--->" + registrationId, true);
+        HdlLogLogic.print("鏋佸厜--->娉ㄥ唽鎴愬姛鍥炶皟Id:" + registrationId, false);
     }
 
     /**
@@ -86,7 +86,7 @@
      * @param isConnected 闀胯繛鎺ョ姸鎬�
      */
     public void onConnected(Context context, boolean isConnected) {
-        HdlLogLogic.print("鏋佸厜--->闀胯繛鎺ョ姸鎬佸洖璋�--->" + isConnected, true);
+        HdlLogLogic.print("鏋佸厜--->闀胯繛鎺ョ姸鎬佸洖璋�:" + isConnected, false);
     }
 
     /**
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
index 6175ea4..9946628 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -117,26 +117,26 @@
     public void uploadDataToCloud(String homeId, String mac, CloudCallBeak<Boolean> callBeak) {
         getInverterOidList(mac, new LinkCallBack<List<OidBean>>() {
             @Override
-            public void onSuccess(List<OidBean> obj) {
-                if (obj == null) {
+            public void onSuccess(List<OidBean> oidBeanList) {
+                if (oidBeanList == null) {
                     return;
                 }
-                fullUpdateOid(homeId, obj, new CloudCallBeak<Boolean>() {
+                fullUpdateOid(homeId, oidBeanList, new CloudCallBeak<Boolean>() {
                     @Override
                     public void onSuccess(Boolean obj) {
-                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�-->" + homeId + "--->" + mac, true);
+                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔垚鍔�--->浣忓畢id:" + homeId + "--->mac:" + mac, true);
                     }
 
                     @Override
                     public void onFailure(HDLException e) {
-                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�-->" + homeId + "--->" + mac + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
+                        HdlLogLogic.print("涓婁紶oid鍒楄〃鍒颁簯绔け璐�--->浣忓畢id:" + homeId + "--->mac:" + mac + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
                     }
                 });
             }
 
             @Override
             public void onError(HDLLinkException e) {
-                HdlLogLogic.print("鑾峰彇閫嗗彉鍣╫id鍒楄〃澶辫触-->" + homeId + "--->" + mac + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
+                HdlLogLogic.print("鑾峰彇閫嗗彉鍣╫id鍒楄〃澶辫触--->浣忓畢id:" + homeId + "--->mac:" + mac + "-->" + e.getMsg() + "(" + e.getCode() + ")", true);
             }
         });
 
@@ -332,7 +332,6 @@
                     cloudCallBeak.onSuccess(true);
                 }
 
-                HdlLogLogic.print("鍏ㄩ噺鏇存柊oid鍒颁簯绔垚鍔�--->", true);
 
             }
 
@@ -341,7 +340,6 @@
                 if (cloudCallBeak != null) {
                     cloudCallBeak.onFailure(e);
                 }
-                HdlLogLogic.print("鍏ㄩ噺鏇存柊oid鍒颁簯绔け璐�--->" + e.getMsg() + "(" + e.getCode() + ")", true);
             }
         });
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
index d45e982..dd17841 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
@@ -27,9 +27,9 @@
     private static volatile HdlFileLogic sHdlFileLogic;
 
     /**
-     * 琛ㄧず1m澶у皬鏁版嵁
+     * 琛ㄧず0.5m澶у皬鏁版嵁
      */
-    private final int mDataSize = 1;
+    private final double mDataSize = 0.5;
 
     /**
      * 鑾峰彇褰撳墠瀵硅薄
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java
index db36dde..897176d 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java
@@ -66,17 +66,20 @@
      * 娣诲姞鍦ㄦ帹閫佹暟鎹埌缂撳瓨鍒楄〃涓�
      */
     private void addPushDataToMemoryList(JPushMessageInfoBean jPushMessageInfoBean) {
-        if (TextUtils.isEmpty(jPushMessageInfoBean.getExpantContent())) {
-            return;
+        try {
+            if (TextUtils.isEmpty(jPushMessageInfoBean.getExpantContent())) {
+                return;
+            }
+            Gson gson = new Gson();
+            MessageBean messageBean = gson.fromJson(jPushMessageInfoBean.getExpantContent(), MessageBean.class);
+            if (messageBean == null) {
+                return;
+            }
+            messageBean.setTitle(jPushMessageInfoBean.getTitle());
+            messageBean.setDeviceDesc(jPushMessageInfoBean.getContent());
+            HdlMessageLogic.getInstance().setListMessage(messageBean, 0);
+            HdlLogLogic.print("娣诲姞鍦ㄦ帹閫佹暟鎹埌缂撳瓨鍒楄〃涓�--->鎴愬姛");
+        } catch (Exception ignored) {
         }
-        Gson gson = new Gson();
-        MessageBean messageBean = gson.fromJson(jPushMessageInfoBean.getExpantContent(), MessageBean.class);
-        if (messageBean == null) {
-            return;
-        }
-        messageBean.setTitle(jPushMessageInfoBean.getTitle());
-        messageBean.setDeviceDesc(jPushMessageInfoBean.getContent());
-        HdlMessageLogic.getInstance().setListMessage(messageBean, 0);
-        HdlLogLogic.print("娣诲姞鍦ㄦ帹閫佹暟鎹埌缂撳瓨鍒楄〃涓�--->鎴愬姛");
     }
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
index 37f8aa4..7cb837f 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
@@ -27,9 +27,8 @@
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.listener.LinkCallBack;
 import com.hdl.photovoltaic.utils.AesUtils;
-import com.hdl.photovoltaic.utils.AppManagerUtils;
 import com.hdl.photovoltaic.utils.Md5Utils;
-import com.hdl.photovoltaic.utils.NetworkUtils;
+import com.hdl.photovoltaic.utils.NetworkUtils123;
 import com.hdl.sdk.link.common.exception.HDLLinkException;
 import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
 import com.hdl.sdk.link.core.callback.HDLLinkCallBack;
@@ -39,12 +38,10 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Objects;
 
 import okhttp3.ResponseBody;
 
@@ -503,7 +500,7 @@
         //1,寤虹珛鏈湴鏈嶅姟锛�
         //2锛屽憡璇夌綉鍏虫墜鏈篿p鍜岀鍙o紱
         //瀹炰緥鍖� 鑾峰彇ip 鍦板潃
-        MyNanoHttpServer.getInstance(NetworkUtils.getInstance().getIPAddress(HDLApp.getInstance()));
+        MyNanoHttpServer.getInstance(NetworkUtils123.getInstance().getIPAddress(HDLApp.getInstance()));
         //MyNanoHttpServer.getInstance("127.0.0.1");
         intentServer = new Intent();
         intentServer.setClass(HDLApp.getInstance(), MyNanoHttpService.class);
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
index 2e0010c..2d67ed3 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -28,8 +28,7 @@
 import com.hdl.photovoltaic.ui.bean.OidBean;
 import com.hdl.photovoltaic.uni.HDLUniMP;
 import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
-import com.hdl.photovoltaic.utils.AppManagerUtils;
-import com.hdl.photovoltaic.utils.NetworkUtils;
+import com.hdl.photovoltaic.utils.NetworkUtils123;
 import com.hdl.photovoltaic.utils.WifiUtils;
 import com.hdl.sdk.link.common.exception.HDLLinkCode;
 import com.hdl.sdk.link.common.exception.HDLLinkException;
@@ -321,7 +320,7 @@
                     break;
                 }
             }
-            HdlLogLogic.print("uni鍙戞潵鐨勬暟鎹�--->澶х被-->" + topic + "\r\n" + data, true);
+            HdlLogLogic.print("uni鍙戞潵鐨勬暟鎹�--->澶х被--->" + topic + "\r\n" + data, true);
         } catch (Exception e) {
             HdlLogLogic.print("uni鍙戞潵鐨勬暟鎹�--->" + e.getMessage(), true);
         }
@@ -518,7 +517,7 @@
         String version = getKeyValue("version", getKeyValue("data", data));//鍥轰欢鐗堟湰
         String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//浜戠涓婃枃浠禡D5
         String imageId = getKeyValue("imageId", getKeyValue("data", data));//鍥轰欢闀滃儚id
-        String module = "FW#" + imageId;
+        String module = "FW#" + imageId;//妯″潡淇℃伅(HW锛氱‖浠�)
 
         //鍗囩骇鏈湴浼樺厛->浜戠鍗囩骇
         HdlDeviceLogic.getInstance().isLocalConnect(deviceMac, new CloudCallBeak<Boolean>() {
@@ -542,7 +541,7 @@
                             }
                             String md5 = HDLMD5Utils.encodeMD5(data);//缃戝叧鍥轰欢闇�瑕�
                             //鍗囩骇鍥轰欢鏂囦欢鍦板潃
-                            String upgradeFileLocalPathUrl = "http://" + NetworkUtils.getInstance().getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + firmwarePathFileName;
+                            String upgradeFileLocalPathUrl = "http://" + NetworkUtils123.getInstance().getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + firmwarePathFileName;
                             //閫氱煡缁欑綉鍏冲崌绾у浐浠舵枃浠跺湴鍧�绛変俊鎭�
                             HdlOtaLogic.getInstance().pushUpgradePacketInfo(deviceMac, oid, module, version, data.length + "", upgradeFileLocalPathUrl, md5, new LinkCallBack<String>() {
                                 @Override
@@ -798,7 +797,7 @@
                             }
                             String md5 = HDLMD5Utils.encodeMD5(data);//缃戝叧椹卞姩闇�瑕�
                             //鍗囩骇椹卞姩鏂囦欢鍦板潃
-                            String upgradeFileLocalPathUrl = "http://" + NetworkUtils.getInstance().getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + drivePathFileName;
+                            String upgradeFileLocalPathUrl = "http://" + NetworkUtils123.getInstance().getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + drivePathFileName;
                             //閫氱煡缁欑綉鍏冲崌绾ч┍鍔ㄦ枃浠跺湴鍧�绛変俊鎭�
                             HdlOtaLogic.getInstance().pushUpgradePacketInfo(deviceMac, deviceOid, module, version, data.length + "", upgradeFileLocalPathUrl, md5, new LinkCallBack<String>() {
                                 @Override
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
index d1f5e46..d2289a6 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -91,8 +91,7 @@
         this.registerAllTopicsListener();
         //鍒濆鍖杕qtt瀹㈡埛绔�
         this.initMqttClient();
-        //鐩戝惉缃戠粶鐘舵�佸彉鍖�
-        this.networkMonitoring();
+
         //涓婁紶鏋佸厜娉ㄥ唽ID
         this.pushTokens();
         //鐐瑰嚮鏋佸厜閫氱煡鏍忔秷鎭繘鏉�
@@ -134,13 +133,13 @@
                                 UserConfigManage.getInstance().setPushId(pushId);
                                 UserConfigManage.getInstance().Save();
                             }
-                            HdlLogLogic.print("娣诲姞鎺ㄩ�佹瀬鍏塈D--->registrationID===" + finalRegistrationID, true);
+                            HdlLogLogic.print("娣诲姞鏋佸厜ID鍒颁簯绔�--->registrationID:" + finalRegistrationID, true);
 
                         }
 
                         @Override
                         public void onFailure(HDLException e) {
-                            HdlLogLogic.print("娣诲姞鎺ㄩ�佹瀬鍏塈D澶辫触--->registrationID===" + finalRegistrationID, true);
+                            HdlLogLogic.print("娣诲姞鏋佸厜ID鍒颁簯绔け璐�--->registrationID:" + finalRegistrationID, true);
                         }
                     });
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java
index b7edec6..441618b 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/me/MeFragment.java
@@ -1,6 +1,5 @@
 package com.hdl.photovoltaic.ui.me;
 
-import android.app.job.JobScheduler;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.TextUtils;
@@ -308,7 +307,7 @@
 
             @Override
             public void onFailure(HDLException e) {
-                HdlLogLogic.print("鑾峰彇鐢ㄦ埛鑷畾涔夐厤缃俯搴﹀崟浣嶈鎯�--->" + e.getMessage() + "(" + e.getCode() + ")", true);
+                HdlLogLogic.print("鑾峰彇鐢ㄦ埛鑷畾涔夐厤缃俯搴﹀崟浣嶈鎯�--->" + e.getMsg() + "(" + e.getCode() + ")", true);
 //                HdlThreadLogic.toast(_mActivity, e);
             }
         });
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
index 81c37bc..8efa489 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/message/MessageFragment.java
@@ -220,11 +220,10 @@
         //鎺ユ敹澶栭儴鐐瑰嚮浜嬩欢
         if (eventBus.getTopic().equals(ConstantManage.homepage_title_tab_switch)) {
             if (eventBus.getType().equals(HomepageTitleTabSwitch.message.toString())) {
-                postEventBus(MessageFunctionTabSwitch.nascent);
-                HdlLogLogic.print("姝e湪鐐瑰嚮銆愭秷鎭��");
                 // 鍙栨秷绮樻�т簨浠�
                 EventBus.getDefault().removeStickyEvent(eventBus);
-
+                postEventBus(MessageFunctionTabSwitch.nascent);
+                HdlLogLogic.print("姝e湪鐐瑰嚮銆愭秷鎭��");
             }
         } else if (eventBus.getTopic().equals(ConstantManage.message_count)) {
             if (eventBus.getType().equals(MessageStateType.untreated)) {
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestLogActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestLogActivity.java
index 971bfb9..9deeb11 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestLogActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestLogActivity.java
@@ -4,6 +4,7 @@
 import android.os.Bundle;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
 import android.text.style.ForegroundColorSpan;
 import android.view.View;
 
@@ -75,6 +76,19 @@
 
             }
         });
+
+        viewBinding.clickToBottomTv.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+//                int offset = (viewBinding.sv.getChildAt(0).getMeasuredHeight() - viewBinding.sv.getHeight()); // 璁$畻闇�瑕佹粴鍔ㄧ殑璺濈
+//                if (offset > 0) {
+//                    viewBinding.sv.smoothScrollTo(0, offset); // 骞虫粦鍦版粴鍔ㄥ埌搴曢儴浣嶇疆
+//                } else {
+//                    viewBinding.sv.fullScroll(View.FOCUS_DOWN); // 鐩存帴婊氬姩鍒版渶鍚庝竴琛�
+//                }
+                viewBinding.sv.fullScroll(View.FOCUS_DOWN); // 鐩存帴婊氬姩鍒版渶鍚庝竴琛�
+            }
+        });
         //涓婁紶鏃ュ織鍒颁簯绔笂
         viewBinding.uploadingLogTv.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -126,39 +140,58 @@
      * 鍒濆鍖栫晫闈�
      */
     private void initView() {
-        HdlThreadLogic.runMainThread(new Runnable() {
+        String homeId = "娴嬭瘯浣忓畢ID=" + UserConfigManage.getInstance().getHomeId();
+        String homeName = "娴嬭瘯浣忓畢鍚嶇О=" + UserConfigManage.getInstance().getHomeName();
+        viewBinding.homeIdTv.setText(homeId);
+        viewBinding.homeNameTv.setText(homeName);
+        showLoading();
+        HdlThreadLogic.runSubThread(new Runnable() {
             @Override
             public void run() {
-
-                String homeId = "娴嬭瘯浣忓畢ID=" + UserConfigManage.getInstance().getHomeId();
-                String homeName = "娴嬭瘯浣忓畢鍚嶇О=" + UserConfigManage.getInstance().getHomeName();
-                viewBinding.homeIdTv.setText(homeId);
-                viewBinding.homeNameTv.setText(homeName);
-
                 HdlFileLogic.getInstance().delFileLien(HdlFileLogic.getInstance().getLogFileNamePath(), 2);
                 String content = HdlLogLogic.readLog();
-                int startIndex = 0;
-                int endIndex;
-                Map<Integer, Integer> map = new IdentityHashMap<>();
-                String[] s = content.split("\r\n");
-                for (int i = 0; i < s.length; i++) {
-                    if (i == 0) {
-                        endIndex = s[i].indexOf("s%");
-                    } else {
-                        startIndex = 2 + startIndex + s[i - 1].length();//2鎹㈣绗﹂暱搴�
-                        endIndex = 2 + startIndex + s[i].indexOf("s%");//2鎹㈣绗﹂暱搴�
+                HdlThreadLogic.runMainThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        hideLoading();
+                        if (TextUtils.isEmpty(content)) {
+                            return;
+                        }
+                        int startIndex = 0;
+                        int endIndex;
+                        Map<Integer, Integer> map = new IdentityHashMap<>();
+                        String[] newArray = content.split("\r\n");
+//                String[] newArray = new String[oldArray.length];//鍊掑簭
+//                for (int i = oldArray.length - 1, j = 0; i >= 0; i--, j++) {
+//                    newArray[j] = oldArray[i];
+//                }
+//                StringBuilder stringBuilder = new StringBuilder();
+//                for (String s : newArray) {
+//                    stringBuilder.append(s).append("\r\n");
+//                }
+//                content = stringBuilder.toString();
+                        for (int i = 0; i < newArray.length; i++) {
+                            if (i == 0) {
+                                endIndex = newArray[i].indexOf("s%");
+                            } else {
+                                startIndex = 2 + startIndex + newArray[i - 1].length();//2鎹㈣绗﹂暱搴�
+                                endIndex = 2 + startIndex + newArray[i].indexOf("s%");//2鎹㈣绗﹂暱搴�
+                            }
+                            map.put(startIndex, endIndex);
+                        }
+                        SpannableStringBuilder spannable = new SpannableStringBuilder(content.replace("s%", "  "));//娉ㄦ剰s%鏄袱涓瓧绗�,鎵�浠ュ崰涓や綅
+                        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
+                            int start = entry.getKey();
+                            int end = entry.getValue();
+                            //璁剧疆鏃堕棿浣撻獙鏄彟涓�绉嶉鑹�
+                            spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+                        }
+                        viewBinding.replyContentTv.setText(spannable);
+
                     }
-                    map.put(startIndex, endIndex);
-                }
-                SpannableStringBuilder spannable = new SpannableStringBuilder(content.replace("s%", "  "));//娉ㄦ剰s%鏄袱涓瓧绗�,鎵�浠ュ崰涓や綅
-                for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
-                    int start = entry.getKey();
-                    int end = entry.getValue();
-                    //璁剧疆鏃堕棿浣撻獙鏄彟涓�绉嶉鑹�
-                    spannable.setSpan(new ForegroundColorSpan(getColor(R.color.text_245EC3)), start, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
-                }
-                viewBinding.replyContentTv.setText(spannable);
+                });
             }
-        }, null, null);
+        });
+
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java
index 7b3e8b9..3baa86d 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java
@@ -2,19 +2,22 @@
 
 import androidx.recyclerview.widget.LinearLayoutManager;
 
-import android.content.Context;
 import android.os.Bundle;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
 
+
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
 import com.hdl.linkpm.sdk.core.exception.HDLException;
-import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
 import com.hdl.photovoltaic.config.UserConfigManage;
 import com.hdl.photovoltaic.databinding.ActivityTestMainBinding;
 import com.hdl.photovoltaic.enums.ShowErrorMode;
+import com.hdl.photovoltaic.internet.TcpClient;
+import com.hdl.photovoltaic.internet.api.TopicApi;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.listener.LinkCallBack;
 import com.hdl.photovoltaic.other.HdlDeviceLogic;
@@ -22,11 +25,13 @@
 import com.hdl.photovoltaic.ui.bean.CloudInverterChildDeviceBean;
 import com.hdl.photovoltaic.ui.bean.OidBean;
 import com.hdl.photovoltaic.widget.ConfirmationCancelDialog;
-import com.hdl.photovoltaic.widget.ConfirmationExceptionDialog;
 import com.hdl.sdk.link.common.exception.HDLLinkException;
 import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
+import com.hdl.sdk.link.core.bean.response.BaseLocalResponse;
 import com.hdl.sdk.link.core.callback.GatewayCallBack;
+import com.hdl.sdk.link.core.callback.HDLLinkCallBack;
 
+import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -74,6 +79,7 @@
     private void initEvent() {
         viewBinding.topBackBtn.setOnClickListener(this);
         viewBinding.topLogBtn.setOnClickListener(this);
+        viewBinding.clickCommandTv.setOnClickListener(this);
         testTitleAdapter.setItemOnClickListener(new TestTitleAdapter.OnClickListener() {
             @Override
             public void OnClick(int position, String title) {
@@ -105,6 +111,8 @@
         } else if (id == viewBinding.topLogBtn.getId()) {
             startActivity(TestLogActivity.class);
 
+        } else if (id == viewBinding.clickCommandTv.getId()) {
+
         }
     }
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils.java
index 73d32cd..5e5b85a 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils.java
@@ -1,83 +1,346 @@
 package com.hdl.photovoltaic.utils;
 
+import static android.Manifest.permission.ACCESS_NETWORK_STATE;
+
+import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.net.ConnectivityManager;
+import android.net.Network;
 import android.net.NetworkInfo;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
+import android.net.NetworkRequest;
+import android.os.Build;
+import android.telephony.TelephonyManager;
 
-import java.net.Inet4Address;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.Enumeration;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
 
+import com.hdl.photovoltaic.HDLApp;
 
+import java.lang.ref.WeakReference;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.Executors;
+
+/**
+ * Created by Tong on 2022/7/13.
+ */
 public class NetworkUtils {
 
-    private static NetworkUtils mNetworkUtils;
 
-
-    public static NetworkUtils getInstance() {
-        if (null == mNetworkUtils) {
-            synchronized (NetworkUtils.class) {
-                if (null == mNetworkUtils) {
-                    mNetworkUtils = new NetworkUtils();
-                }
-            }
-        }
-        return mNetworkUtils;
+    public enum NetworkType {
+        NETWORK_ETHERNET,
+        NETWORK_WIFI,
+        NETWORK_5G,
+        NETWORK_4G,
+        NETWORK_3G,
+        NETWORK_2G,
+        NETWORK_UNKNOWN,
+        NETWORK_NO
     }
 
-    /**
-     * 鑾峰緱IP鍦板潃锛屽垎涓轰袱绉嶆儏鍐�:
-     * 涓�锛氭槸wifi涓嬶紱
-     * 浜岋細鏄Щ鍔ㄧ綉缁滀笅锛�
-     */
-    public String getIPAddress(Context context) {
-        NetworkInfo info = ((ConnectivityManager) context
-                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
-        if (info != null && info.isConnected()) {
-            if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//褰撳墠浣跨敤2G/3G/4G缃戠粶
-                try {
-                    //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
-                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
-                        NetworkInterface intf = en.nextElement();
-                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
-                            InetAddress inetAddress = enumIpAddr.nextElement();
-                            if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
-                                return inetAddress.getHostAddress();
+    public interface OnNetworkStatusChangedListener {
+        void onDisconnected();
+
+        void onConnected(NetworkType networkType);
+    }
+
+    public static void init(Context context) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            NetworkCallbackImpl.getInstance().init(context);
+        } else {
+            NetworkChangedReceiver.getInstance().init(context);
+        }
+    }
+
+
+    public static void registerNetworkStatusChangedListener(final OnNetworkStatusChangedListener listener) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            NetworkCallbackImpl.getInstance().registerListener(listener);
+        } else {
+            NetworkChangedReceiver.getInstance().registerListener(listener);
+        }
+
+
+    }
+
+    public static void unregisterListener(final OnNetworkStatusChangedListener listener) {
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            NetworkCallbackImpl.getInstance().unregisterListener(listener);
+        } else {
+            NetworkChangedReceiver.getInstance().unregisterListener(listener);
+        }
+    }
+
+    public static final class NetworkChangedReceiver extends BroadcastReceiver {
+
+        private WeakReference<Context> mContext;
+
+        private NetworkChangedReceiver() {
+        }
+
+        private static class SingletonInstance {
+            private static final NetworkChangedReceiver INSTANCE = new NetworkChangedReceiver();
+        }
+
+        public static NetworkChangedReceiver getInstance() {
+            return SingletonInstance.INSTANCE;
+        }
+
+        private NetworkType mType;
+        private final Set<OnNetworkStatusChangedListener> mListeners = new HashSet<>();
+
+        public void init(Context context) {
+            if (mContext == null) {
+                getInstance().mContext = new WeakReference<>(context.getApplicationContext());
+            }
+        }
+
+        @RequiresPermission(ACCESS_NETWORK_STATE)
+        public void registerListener(final OnNetworkStatusChangedListener listener) {
+            if (listener == null) return;
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    int preSize = mListeners.size();
+                    mListeners.add(listener);
+                    if (preSize == 0 && mListeners.size() == 1 && null != mContext.get()) {
+                        mType = getNetworkType();
+                        IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+                        mContext.get().registerReceiver(NetworkChangedReceiver.getInstance(), intentFilter);
+                    }
+
+                }
+            });
+
+        }
+
+        public boolean isRegistered(final OnNetworkStatusChangedListener listener) {
+            if (listener == null) return false;
+            return mListeners.contains(listener);
+        }
+
+        public void unregisterListener(final OnNetworkStatusChangedListener listener) {
+            if (listener == null) return;
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    int preSize = mListeners.size();
+                    mListeners.remove(listener);
+                    if (preSize == 1 && mListeners.size() == 0 && mContext.get() != null) {
+                        mContext.get().unregisterReceiver(NetworkChangedReceiver.getInstance());
+                    }
+                }
+            });
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
+                Executors.newSingleThreadExecutor().execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        NetworkType networkType = NetworkUtils.getNetworkType();
+                        if (mType == networkType) return;
+                        mType = networkType;
+                        if (networkType == NetworkType.NETWORK_NO) {
+                            for (OnNetworkStatusChangedListener listener : mListeners) {
+                                listener.onDisconnected();
+                            }
+                        } else {
+                            for (OnNetworkStatusChangedListener listener : mListeners) {
+                                listener.onConnected(networkType);
                             }
                         }
                     }
-                } catch (SocketException e) {
-                    e.printStackTrace();
-                }
-            } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//褰撳墠浣跨敤鏃犵嚎缃戠粶
-                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
-                //璋冪敤鏂规硶灏唅nt杞崲涓哄湴鍧�瀛楃涓�
-                String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//寰楀埌IPV4鍦板潃
-                return ipAddress;
+                });
             }
-        } else {
-            //褰撳墠鏃犵綉缁滆繛鎺�,璇峰湪璁剧疆涓墦寮�缃戠粶
         }
-        return null;
+
+
     }
 
-    /**
-     * 灏嗗緱鍒扮殑int绫诲瀷鐨処P杞崲涓篠tring绫诲瀷
-     *
-     * @param ip int绫诲瀷
-     * @return -
-     */
-    public static String intIP2StringIP(int ip) {
-        return (ip & 0xFF) + "." +
-                ((ip >> 8) & 0xFF) + "." +
-                ((ip >> 16) & 0xFF) + "." +
-                (ip >> 24 & 0xFF);
+    @RequiresPermission(ACCESS_NETWORK_STATE)
+    private static boolean isEthernet() {
+        final ConnectivityManager cm =
+                (ConnectivityManager) HDLApp.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
+        if (cm == null) return false;
+        final NetworkInfo info = cm.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);
+        if (info == null) return false;
+        NetworkInfo.State state = info.getState();
+        if (null == state) return false;
+        return state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING;
+    }
+
+    @RequiresPermission(ACCESS_NETWORK_STATE)
+    public static NetworkType getNetworkType() {
+        if (isEthernet()) {
+            return NetworkType.NETWORK_ETHERNET;
+        }
+        NetworkInfo info = getActiveNetworkInfo();
+        if (info != null && info.isAvailable()) {
+            if (info.getType() == ConnectivityManager.TYPE_WIFI) {
+                return NetworkType.NETWORK_WIFI;
+            } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
+                switch (info.getSubtype()) {
+                    case TelephonyManager.NETWORK_TYPE_GSM:
+                    case TelephonyManager.NETWORK_TYPE_GPRS:
+                    case TelephonyManager.NETWORK_TYPE_CDMA:
+                    case TelephonyManager.NETWORK_TYPE_EDGE:
+                    case TelephonyManager.NETWORK_TYPE_1xRTT:
+                    case TelephonyManager.NETWORK_TYPE_IDEN:
+                        return NetworkType.NETWORK_2G;
+
+                    case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
+                    case TelephonyManager.NETWORK_TYPE_EVDO_A:
+                    case TelephonyManager.NETWORK_TYPE_UMTS:
+                    case TelephonyManager.NETWORK_TYPE_EVDO_0:
+                    case TelephonyManager.NETWORK_TYPE_HSDPA:
+                    case TelephonyManager.NETWORK_TYPE_HSUPA:
+                    case TelephonyManager.NETWORK_TYPE_HSPA:
+                    case TelephonyManager.NETWORK_TYPE_EVDO_B:
+                    case TelephonyManager.NETWORK_TYPE_EHRPD:
+                    case TelephonyManager.NETWORK_TYPE_HSPAP:
+                        return NetworkType.NETWORK_3G;
+
+                    case TelephonyManager.NETWORK_TYPE_IWLAN:
+                    case TelephonyManager.NETWORK_TYPE_LTE:
+                        return NetworkType.NETWORK_4G;
+                    case 20:
+                        return NetworkType.NETWORK_5G;
+                    default:
+                        String subtypeName = info.getSubtypeName();
+                        if (subtypeName.equalsIgnoreCase("TD-SCDMA")
+                                || subtypeName.equalsIgnoreCase("WCDMA")
+                                || subtypeName.equalsIgnoreCase("CDMA2000")) {
+                            return NetworkType.NETWORK_3G;
+                        } else {
+                            return NetworkType.NETWORK_UNKNOWN;
+                        }
+                }
+            } else {
+                return NetworkType.NETWORK_UNKNOWN;
+            }
+        }
+        return NetworkType.NETWORK_NO;
+    }
+
+
+    @RequiresPermission(ACCESS_NETWORK_STATE)
+    private static NetworkInfo getActiveNetworkInfo() {
+        ConnectivityManager cm =
+                (ConnectivityManager) HDLApp.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
+        if (cm == null) return null;
+        return cm.getActiveNetworkInfo();
+    }
+
+
+    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+    private static class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {
+
+
+        private final Set<OnNetworkStatusChangedListener> mListeners = new HashSet<>();
+        private ConnectivityManager mConnectivityManager;
+
+        private WeakReference<Context> mContext;
+
+        public NetworkCallbackImpl() {
+        }
+
+        private static class SingletonInstance {
+            private static final NetworkCallbackImpl INSTANCE = new NetworkCallbackImpl();
+        }
+
+        public static NetworkCallbackImpl getInstance() {
+            return SingletonInstance.INSTANCE;
+        }
+
+
+        public void init(Context context) {
+            if (mContext == null) {
+                getInstance().mContext = new WeakReference<>(context.getApplicationContext());
+            }
+        }
+
+
+        @RequiresPermission(ACCESS_NETWORK_STATE)
+        public void registerListener(final OnNetworkStatusChangedListener listener) {
+            if (listener == null || mContext == null || mContext.get() == null) return;
+
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+
+                @Override
+                public void run() {
+                    if (mContext.get() == null) return;
+                    int preSize = mListeners.size();
+                    mListeners.add(listener);
+                    if (preSize == 0 && mListeners.size() == 1) {
+                        NetworkRequest.Builder builder = new NetworkRequest.Builder();
+                        NetworkRequest request = builder.build();
+                        mConnectivityManager = (ConnectivityManager) mContext.get().getSystemService(Context.CONNECTIVITY_SERVICE);
+                        mConnectivityManager.requestNetwork(request, getInstance());
+                    }
+
+                }
+            });
+
+        }
+
+
+        public void unregisterListener(final OnNetworkStatusChangedListener listener) {
+            if (listener == null) return;
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    int preSize = mListeners.size();
+                    mListeners.remove(listener);
+                    if (preSize == 1 && mListeners.size() == 0 && mConnectivityManager != null) {
+                        mConnectivityManager.unregisterNetworkCallback(getInstance());
+                    }
+                }
+            });
+        }
+
+        @Override
+        public void onAvailable(Network network) {
+            super.onAvailable(network);
+
+            //缃戠粶杩炴帴
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
+                    if (networkInfo != null) {
+                        NetworkType networkType = getNetworkType();
+                        for (OnNetworkStatusChangedListener listener : mListeners) {
+                            listener.onConnected(networkType);
+                        }
+                    }
+
+                }
+            });
+
+        }
+
+        @Override
+        public void onLost(Network network) {
+            super.onLost(network);
+            //缃戠粶宸叉柇寮�
+            Executors.newSingleThreadExecutor().execute(new Runnable() {
+                @Override
+                public void run() {
+                    for (OnNetworkStatusChangedListener listener : mListeners) {
+                        listener.onDisconnected();
+                    }
+                }
+            });
+        }
+
+
     }
 
 
 }
+
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils123.java b/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils123.java
new file mode 100644
index 0000000..46f7287
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/NetworkUtils123.java
@@ -0,0 +1,83 @@
+package com.hdl.photovoltaic.utils;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+
+
+public class NetworkUtils123 {
+
+    private static NetworkUtils123 mNetworkUtils123;
+
+
+    public static NetworkUtils123 getInstance() {
+        if (null == mNetworkUtils123) {
+            synchronized (NetworkUtils123.class) {
+                if (null == mNetworkUtils123) {
+                    mNetworkUtils123 = new NetworkUtils123();
+                }
+            }
+        }
+        return mNetworkUtils123;
+    }
+
+    /**
+     * 鑾峰緱IP鍦板潃锛屽垎涓轰袱绉嶆儏鍐�:
+     * 涓�锛氭槸wifi涓嬶紱
+     * 浜岋細鏄Щ鍔ㄧ綉缁滀笅锛�
+     */
+    public String getIPAddress(Context context) {
+        NetworkInfo info = ((ConnectivityManager) context
+                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
+        if (info != null && info.isConnected()) {
+            if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//褰撳墠浣跨敤2G/3G/4G缃戠粶
+                try {
+                    //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
+                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
+                        NetworkInterface intf = en.nextElement();
+                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
+                            InetAddress inetAddress = enumIpAddr.nextElement();
+                            if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
+                                return inetAddress.getHostAddress();
+                            }
+                        }
+                    }
+                } catch (SocketException e) {
+                    e.printStackTrace();
+                }
+            } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//褰撳墠浣跨敤鏃犵嚎缃戠粶
+                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+                //璋冪敤鏂规硶灏唅nt杞崲涓哄湴鍧�瀛楃涓�
+                String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//寰楀埌IPV4鍦板潃
+                return ipAddress;
+            }
+        } else {
+            //褰撳墠鏃犵綉缁滆繛鎺�,璇峰湪璁剧疆涓墦寮�缃戠粶
+        }
+        return null;
+    }
+
+    /**
+     * 灏嗗緱鍒扮殑int绫诲瀷鐨処P杞崲涓篠tring绫诲瀷
+     *
+     * @param ip int绫诲瀷
+     * @return -
+     */
+    public static String intIP2StringIP(int ip) {
+        return (ip & 0xFF) + "." +
+                ((ip >> 8) & 0xFF) + "." +
+                ((ip >> 16) & 0xFF) + "." +
+                (ip >> 24 & 0xFF);
+    }
+
+
+}
diff --git a/app/src/main/res/layout/activity_test_log.xml b/app/src/main/res/layout/activity_test_log.xml
index 3a0b898..a592164 100644
--- a/app/src/main/res/layout/activity_test_log.xml
+++ b/app/src/main/res/layout/activity_test_log.xml
@@ -84,10 +84,10 @@
             android:id="@+id/homeId_tv"
             android:layout_width="wrap_content"
             android:layout_height="@dimen/dp_25"
+            android:layout_marginStart="4dp"
             android:textColor="@color/text_030D1C"
             android:textIsSelectable="true"
             android:textSize="@dimen/text_15"
-            android:layout_marginStart="@dimen/dp_5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -100,6 +100,19 @@
             android:textSize="@dimen/text_15"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/homeId_tv" />
+
+
+        <TextView
+            android:id="@+id/click_to_bottom_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_25"
+            android:layout_marginEnd="20dp"
+            android:text="婊氬埌搴曢儴"
+            android:textColor="@color/text_245EC3"
+            android:textSize="@dimen/text_15"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <View
             android:layout_width="match_parent"
@@ -116,7 +129,6 @@
         android:id="@+id/sv"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_marginBottom="@dimen/dp_50"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
@@ -128,7 +140,7 @@
 
             <TextView
                 android:id="@+id/reply_content_tv"
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:gravity="start"
                 android:padding="@dimen/dp_10"
@@ -143,12 +155,12 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="@dimen/dp_50"
+        android:background="@color/text_FFFFFFFF"
+        android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/sv"
-        android:background="@color/text_FFFFFFFF"
-        >
+        app:layout_constraintTop_toBottomOf="@+id/sv">
 
         <TextView
             android:id="@+id/uploading_log_tv"
diff --git a/app/src/main/res/layout/activity_test_main.xml b/app/src/main/res/layout/activity_test_main.xml
index 4cfb376..63bf770 100644
--- a/app/src/main/res/layout/activity_test_main.xml
+++ b/app/src/main/res/layout/activity_test_main.xml
@@ -85,10 +85,10 @@
             android:id="@+id/homeId_tv"
             android:layout_width="wrap_content"
             android:layout_height="@dimen/dp_25"
+            android:layout_marginStart="@dimen/dp_5"
             android:textColor="@color/text_030D1C"
             android:textIsSelectable="true"
             android:textSize="@dimen/text_15"
-            android:layout_marginStart="@dimen/dp_5"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -102,6 +102,19 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/homeId_tv" />
 
+        <TextView
+            android:id="@+id/click_command_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/dp_25"
+            android:layout_marginEnd="20dp"
+            android:text="娴嬭瘯鎸囦护"
+            android:textColor="@color/text_245EC3"
+            android:textSize="@dimen/text_15"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
         <View
             android:layout_width="match_parent"
             android:layout_height="0.5dp"

--
Gitblit v1.8.0