From: TrillGates Date: Mon, 12 Apr 2021 03:03:43 +0000 (+0800) Subject: add wifi config. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=0967996c9d7dfec612d34aa6bafc8c9b7037b1dc;p=protocol_srv.git add wifi config. --- diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index c6fcb061..e38e4776 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -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 index 00000000..b9b92e0f --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/utils/WifiSupport.java @@ -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 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 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 noSameName(List oldSr) { + List newSr = new ArrayList(); + 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 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 diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 283c6958..ab7dc64f 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -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";