From 86116427931cc724ae1e3105738a34e0619ca287 Mon Sep 17 00:00:00 2001
From: 562935844@qq.com
Date: 星期二, 04 四月 2023 16:12:47 +0800
Subject: [PATCH] 增加网关未上云密钥为空的问题处理

---
 HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java |  154 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 150 insertions(+), 4 deletions(-)

diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
index 832cf2f..8fa0785 100644
--- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
+++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/IpUtils.java
@@ -3,6 +3,10 @@
 import android.content.Context;
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.hdl.sdk.connect.config.HDLLinkConfig;
 
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
@@ -15,10 +19,10 @@
  */
 public class IpUtils {
 
-    /**
-     * @return 骞挎挱鍦板潃
-     */
-    public static String getBroadcastAddress() {
+//    /**
+//     * @return 骞挎挱鍦板潃
+//     */
+    /*public static String getBroadcastAddress() {
 //        try {
 //            for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
 //                 niEnum.hasMoreElements(); ) {
@@ -34,6 +38,45 @@
 //        } catch (SocketException e) {
 //            e.printStackTrace();
 //        }
+        return "255.255.255.255";
+    }*/
+
+
+    /**
+     * @return 骞挎挱鍦板潃
+     */
+    public static synchronized String getBroadcastAddress() {
+        try {
+            if (!TextUtils.isEmpty(HDLLinkConfig.getInstance().getNetworkName())) {
+                for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
+                     niEnum.hasMoreElements(); ) {
+                    NetworkInterface ni = niEnum.nextElement();
+                    if (!ni.isLoopback() && ni.getName().equalsIgnoreCase(HDLLinkConfig.getInstance().getNetworkName())) {
+                        for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
+                            if (interfaceAddress.getBroadcast() != null) {
+                                Log.d("TAG", "----->ni.getName()= " + ni.getName() + " ip= " + interfaceAddress.getBroadcast().toString().substring(1));
+                                return interfaceAddress.getBroadcast().toString().substring(1);
+                            }
+                        }
+                    }
+                }
+
+                for (Enumeration<NetworkInterface> niEnum = NetworkInterface.getNetworkInterfaces();
+                     niEnum.hasMoreElements(); ) {
+                    NetworkInterface ni = niEnum.nextElement();
+                    if (!ni.isLoopback()) {
+                        for (InterfaceAddress interfaceAddress : ni.getInterfaceAddresses()) {
+                            if (interfaceAddress.getBroadcast() != null) {
+                                Log.d("TAG", "----->ip= " + interfaceAddress.getBroadcast().toString().substring(1));
+                                return interfaceAddress.getBroadcast().toString().substring(1);
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (SocketException e) {
+            e.printStackTrace();
+        }
         return "255.255.255.255";
     }
 
@@ -86,4 +129,107 @@
                 ((i >> 16) & 0xFF) + "." +
                 (i >> 24 & 0xFF);
     }
+
+    private static String getWifiManagerAddress(Context context) {
+        try {
+            if (context != null) {
+                WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+                if (wifiManager != null && wifiManager.isWifiEnabled()) {
+                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+                    int ipAddress = wifiInfo.getIpAddress();
+                    return intToIp(ipAddress);
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    public static String getWifiIpV4Address(Context context) {
+        try {
+            //鐩存帴浠巜ifiManager鑾峰彇
+            String managerAddress = getWifiManagerAddress(context);
+            if (!TextUtils.isEmpty(managerAddress)) {
+                return managerAddress;
+            }
+
+            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
+            while (enumeration.hasMoreElements()) {
+                NetworkInterface network = enumeration.nextElement();
+                if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) {
+                    continue;
+                } else {
+                    Enumeration<InetAddress> addresses = network.getInetAddresses();
+                    while (addresses.hasMoreElements()) {
+                        InetAddress address = addresses.nextElement();
+                        if (!address.isLoopbackAddress() && !address.isAnyLocalAddress()
+                                && !address.isLinkLocalAddress()) {
+                            String hostAddress = address.getHostAddress();
+                            if (hostAddress != null) {
+                                boolean isIPv4 = hostAddress.indexOf(':') < 0;
+                                if (isIPv4) return hostAddress;
+                            }
+
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    public static String getEth0IpV4Address() {
+        try {
+            Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
+            while (enumeration.hasMoreElements()) {
+                NetworkInterface network = enumeration.nextElement();
+                if (network == null || network.isVirtual() || !network.isUp() || network.isLoopback() || !network.getName().equalsIgnoreCase("eth0")) {
+                    continue;
+                } else {
+                    Enumeration<InetAddress> addresses = network.getInetAddresses();
+
+                    while (addresses.hasMoreElements()) {
+                        InetAddress address = addresses.nextElement();
+                        if (!address.isLoopbackAddress() && !address.isAnyLocalAddress()
+                                && !address.isLinkLocalAddress()) {
+                            String hostAddress = address.getHostAddress();
+                            if (hostAddress != null) {
+                                boolean isIPv4 = hostAddress.indexOf(':') < 0;
+                                if (isIPv4) return hostAddress;
+                            }
+
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /**
+     * @return 鑾峰彇鍏ㄩ儴鏈夋晥ip鍦板潃, 浼樺厛杩斿洖鏈夌嚎ip
+     */
+    public static String getIpV4Address(Context context) {
+
+        try {
+            String eth0IpV4Address = getEth0IpV4Address();
+            if (!TextUtils.isEmpty(eth0IpV4Address)) {
+                return eth0IpV4Address;
+            }
+            String wifiIpV4Address = getWifiIpV4Address(context);
+            if (!TextUtils.isEmpty(wifiIpV4Address)) {
+                return wifiIpV4Address;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
 }

--
Gitblit v1.8.0