add wifi config.
authorTrillGates <williamtrillgates@gmail.com>
Mon, 12 Apr 2021 03:03:43 +0000 (11:03 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Mon, 12 Apr 2021 03:03:43 +0000 (11:03 +0800)
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/utils/WifiSupport.java [new file with mode: 0644]
app/src/main/java/com/ic/protocols/protocol_fzd.java

index c6fcb06..e38e477 100644 (file)
@@ -587,7 +587,6 @@ public class ICSmsManager extends BroadcastReceiver {
                             }
                             sb.append("set noTurnOffWhenScreenOff " + enabled);
                             sendSMS(phonenumber, sb.toString());
-
                         } else {
                             sendSMS(phonenumber, "WiFi Control format error!");
                         }
diff --git a/app/src/main/java/com/enqualcomm/support/utils/WifiSupport.java b/app/src/main/java/com/enqualcomm/support/utils/WifiSupport.java
new file mode 100644 (file)
index 0000000..b9b92e0
--- /dev/null
@@ -0,0 +1,253 @@
+package com.enqualcomm.support.utils;
+
+
+import android.content.Context;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class WifiSupport {
+
+    private static final String TAG = "WifiSupport";
+
+    public enum WifiCipherType {
+        WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID
+    }
+
+    public WifiSupport() {
+    }
+
+    public static List<ScanResult> getWifiScanResult(Context context) {
+        return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getScanResults();
+    }
+
+    public static boolean isWifiEnable(Context context) {
+        return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).isWifiEnabled();
+    }
+
+    public static WifiInfo getConnectedWifiInfo(Context context) {
+        return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo();
+    }
+
+    public static List getConfigurations(Context context) {
+        return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConfiguredNetworks();
+    }
+
+
+    public static WifiConfiguration createWifiConfig(String SSID, String password, WifiCipherType type) {
+
+        WifiConfiguration config = new WifiConfiguration();
+        config.allowedAuthAlgorithms.clear();
+        config.allowedGroupCiphers.clear();
+        config.allowedKeyManagement.clear();
+        config.allowedPairwiseCiphers.clear();
+        config.allowedProtocols.clear();
+        config.SSID = "\"" + SSID + "\"";
+
+        if (type == WifiCipherType.WIFICIPHER_NOPASS) {
+//            config.wepKeys[0] = "";  //注意这里
+            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+//            config.wepTxKeyIndex = 0;
+        }
+
+        if (type == WifiCipherType.WIFICIPHER_WEP) {
+            config.preSharedKey = "\"" + password + "\"";
+            config.hiddenSSID = true;
+            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
+            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+            config.wepTxKeyIndex = 0;
+        }
+
+        if (type == WifiCipherType.WIFICIPHER_WPA) {
+            config.preSharedKey = "\"" + password + "\"";
+            config.hiddenSSID = true;
+            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
+            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
+            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
+            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
+            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
+            config.status = WifiConfiguration.Status.ENABLED;
+
+        }
+
+        return config;
+
+    }
+
+    /**
+     * 接入某个wifi热点
+     */
+    public static boolean addNetWork(WifiConfiguration config, Context context) {
+
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+
+        WifiInfo wifiinfo = wifimanager.getConnectionInfo();
+
+        if (null != wifiinfo) {
+            wifimanager.disableNetwork(wifiinfo.getNetworkId());
+        }
+
+        boolean result = false;
+
+        if (config.networkId > 0) {
+            result = wifimanager.enableNetwork(config.networkId, true);
+            wifimanager.updateNetwork(config);
+        } else {
+
+            int i = wifimanager.addNetwork(config);
+            result = false;
+            if (i > 0) {
+                wifimanager.saveConfiguration();
+                return wifimanager.enableNetwork(i, true);
+            }
+        }
+
+        return result;
+
+    }
+
+    /**
+     * 判断wifi热点支持的加密方式
+     */
+    public static WifiCipherType getWifiCipher(String s) {
+        if (s.isEmpty()) {
+            return WifiCipherType.WIFICIPHER_INVALID;
+        } else if (s.contains("WEP")) {
+            return WifiCipherType.WIFICIPHER_WEP;
+        } else if (s.contains("WPA") || s.contains("WPA2") || s.contains("WPS")) {
+            return WifiCipherType.WIFICIPHER_WPA;
+        } else {
+            return WifiCipherType.WIFICIPHER_NOPASS;
+        }
+    }
+
+    //查看以前是否也配置过这个网络
+    public static WifiConfiguration isExsits(String SSID, Context context) {
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        List<WifiConfiguration> existingConfigs = wifimanager.getConfiguredNetworks();
+        for (WifiConfiguration existingConfig : existingConfigs) {
+            if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
+                return existingConfig;
+            }
+        }
+        return null;
+    }
+
+    // 打开WIFI
+    public static void openWifi(Context context) {
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        if (!wifimanager.isWifiEnabled()) {
+            wifimanager.setWifiEnabled(true);
+        }
+    }
+
+    // 关闭WIFI
+    public static void closeWifi(Context context) {
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        if (wifimanager.isWifiEnabled()) {
+            wifimanager.setWifiEnabled(false);
+        }
+    }
+
+    public static boolean isOpenWifi(Context context) {
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        boolean b = wifimanager.isWifiEnabled();
+        return b;
+    }
+
+    /**
+     * 将idAddress转化成string类型的Id字符串
+     *
+     * @param idString
+     * @return
+     */
+    public static String getStringId(int idString) {
+        StringBuffer sb = new StringBuffer();
+        int b = (idString >> 0) & 0xff;
+        sb.append(b + ".");
+        b = (idString >> 8) & 0xff;
+        sb.append(b + ".");
+        b = (idString >> 16) & 0xff;
+        sb.append(b + ".");
+        b = (idString >> 24) & 0xff;
+        sb.append(b);
+        return sb.toString();
+    }
+
+    /**
+     * 设置安全性
+     *
+     * @param capabilities
+     * @return
+     */
+    public static String getCapabilitiesString(String capabilities) {
+        if (capabilities.contains("WEP")) {
+            return "WEP";
+        } else if (capabilities.contains("WPA") || capabilities.contains("WPA2") || capabilities.contains("WPS")) {
+            return "WPA/WPA2";
+        } else {
+            return "OPEN";
+        }
+    }
+
+    public static boolean getIsWifiEnabled(Context context) {
+        WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+        return wifimanager.isWifiEnabled();
+    }
+
+    /**
+     * 去除同名WIFI
+     *
+     * @param oldSr 需要去除同名的列表
+     * @return 返回不包含同命的列表
+     */
+    public static List<ScanResult> noSameName(List<ScanResult> oldSr) {
+        List<ScanResult> newSr = new ArrayList<ScanResult>();
+        for (ScanResult result : oldSr) {
+            if (!TextUtils.isEmpty(result.SSID) && !containName(newSr, result.SSID))
+                newSr.add(result);
+        }
+        return newSr;
+    }
+
+    /**
+     * 判断一个扫描结果中,是否包含了某个名称的WIFI
+     *
+     * @param sr   扫描结果
+     * @param name 要查询的名称
+     * @return 返回true表示包含了该名称的WIFI,返回false表示不包含
+     */
+    public static boolean containName(List<ScanResult> sr, String name) {
+        for (ScanResult result : sr) {
+            if (!TextUtils.isEmpty(result.SSID) && result.SSID.equals(name))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * 返回level 等级
+     */
+    public static int getLevel(int level) {
+        if (Math.abs(level) < 50) {
+            return 1;
+        } else if (Math.abs(level) < 75) {
+            return 2;
+        } else if (Math.abs(level) < 90) {
+            return 3;
+        } else {
+            return 4;
+        }
+    }
+
+}
\ No newline at end of file
index 283c695..ab7dc64 100644 (file)
@@ -18,6 +18,7 @@ import android.media.AudioManager;
 import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
+import android.net.wifi.WifiConfiguration;
 import android.os.Build;
 import android.os.Environment;
 import android.os.Handler;
@@ -49,6 +50,7 @@ import com.enqualcomm.support.utils.MD5;
 import com.enqualcomm.support.utils.ProfileManager;
 import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
+import com.enqualcomm.support.utils.WifiSupport;
 import com.enqualcomm.support.utils.regexUtil;
 
 import java.io.ByteArrayOutputStream;
@@ -412,6 +414,7 @@ public class protocol_fzd {
         bldstart,//远程测血压
         hrtstart,//远程测量心率
         BOOTOFF,//定时关机
+        WIFISET,//wifi密码设置
         oxygen,//血氧上传
         blood,//血压上传
         heart,//心率上传
@@ -441,6 +444,7 @@ public class protocol_fzd {
         cmdMap.put(CMD_TYPE.SHAKE, "SHAKE");
         cmdMap.put(CMD_TYPE.RECORD, "RECORD");
         cmdMap.put(CMD_TYPE.INFO, "INFO");
+        cmdMap.put(CMD_TYPE.WIFISET, "WIFISET");
         cmdMap.put(CMD_TYPE.BLE, "BLE");
         cmdMap.put(CMD_TYPE.PING, "PING");
         cmdMap.put(CMD_TYPE.rcapture, "rcapture");
@@ -648,7 +652,6 @@ public class protocol_fzd {
                         handleCmd(key, cmd, data);
                     }
                 }
-
             }
         }
         return true;
@@ -1682,11 +1685,61 @@ public class protocol_fzd {
                 handleBOOTOFF(cmd, data, mRuntime);
                 mConnection.send(genFZDCMD(cmdMap.get(CMD_TYPE.BOOTOFF)));
                 break;
+            case WIFISET:
+                ICLogger.d("收到WIFI密码设置指令.");
+                mConnection.send(genFZDCMD(cmdMap.get(CMD_TYPE.WIFISET)));
+                handleWIFISET(cmd, data, mRuntime);
+                break;
         }
         return ret;
 
     }
 
+    /**
+     * 设置wifi账号和密码
+     *
+     * @param cmd
+     * @param data
+     * @param mRuntime
+     */
+    private void handleWIFISET(String cmd, String data, Runtime mRuntime) {
+        ICLogger.d("WIFISET == > " + data);
+        //解析数据
+        String[] split = data.split(CMDSPLIT);
+        ICLogger.d("length == > " + split.length);
+        Context context = mRuntime.getContextProxy()
+                .context;
+        //账号和密码
+        if (split.length == 2) {
+            String ssid = Util.decodeUnicode2Utf8(split[0]);
+            String password = split[1];
+            ICLogger.d("ssid = > " + ssid);
+            ICLogger.d("password = > " + password);
+            WifiConfiguration tempConfig = WifiSupport.isExsits(ssid, context);
+            if (tempConfig == null) {
+                WifiConfiguration wifiConfigurationWep = WifiSupport.createWifiConfig(
+                        ssid, password, WifiSupport.WifiCipherType.WIFICIPHER_WEP);
+                WifiConfiguration wifiConfigurationWpa = WifiSupport.createWifiConfig(
+                        ssid, password, WifiSupport.WifiCipherType.WIFICIPHER_WPA);
+                boolean result = WifiSupport.addNetWork(wifiConfigurationWep, context);
+                ICLogger.d("result == > " + result);
+                boolean wpaResult = WifiSupport.addNetWork(wifiConfigurationWpa, context);
+                ICLogger.d("wpaResult == > " + wpaResult);
+            } else {
+                boolean b = WifiSupport.addNetWork(tempConfig, context);
+                ICLogger.d("old config add result..." + b);
+            }
+        } else if (split.length == 1) {
+            //只有账号
+            String ssid = Util.decodeUnicode2Utf8(split[0]);
+            ICLogger.d("ssid == > " + ssid);
+            WifiConfiguration wifiConfiguration = WifiSupport.createWifiConfig(
+                    ssid, "", WifiSupport.WifiCipherType.WIFICIPHER_NOPASS);
+            boolean wpaResult = WifiSupport.addNetWork(wifiConfiguration, context);
+            ICLogger.d("no password == > " + wpaResult);
+        }
+    }
+
 
     private static final String BOOT_OFF_ACTION_OFF = "0";
     private static final String BOOT_OFF_ACTION_ON = "1";