} 3.开发流程
上篇讲到注册相关的BroadcastReceiver以及通过BroadcastReceiver来获取WIFI的各种通知,本篇接着上一篇来解析WIFI开发的过程,现在我们需要新建操作WIFI的工具类SysManagerWIFIUtil.java. private SysManagerWIFIAdmin(Context context) { m_context = context; mWifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); } public static SysManagerWIFIUtil getInstance(Context context) { if (null == m_instance) { SysLog.out(TAG, "SysManagerWIFIUtil getInstance", "create singleton instance"); synchronized (SysManagerWIFIUtil.class) { if (null == m_instance) { m_instance = new SysManagerWIFIUtil(context); } } } return m_instance; } public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } } public void closeWifi() { if (mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } public int checkState() { return mWifiManager.getWifiState(); } public WifiManager getWifiManager() { return mWifiManager; } public synchronized List<WifiConfiguration> getConfiguration() { // saved AP mWifiConfiguration = mWifiManager.getConfiguredNetworks(); return mWifiConfiguration; } public synchronized WifiInfo getConnectionInfo() { mWifiInfo = mWifiManager.getConnectionInfo(); // SysLog.out(TAG, "connect", "" + mWifiInfo.toString()); return mWifiInfo; } // connect savedAP public boolean connectConfiguration(int netid) { if (netid < -1) { return false; } SysLog.out(TAG, "SysManagerWIFIAdmin enableNetwork", "start"); boolean c = mWifiManager.enableNetwork(netid, true); return c; } public synchronized void saveConfiguration() { SysLog.out(TAG, "SysManagerWIFIAdmin saveConfiguration", "start"); mWifiManager.saveConfiguration(); } public synchronized void startScan() { SysLog.out(TAG, "SysManagerWIFIAdmin startScan", "start"); mWifiManager.startScan(); } public synchronized List<ScanResult> getWifiList() { // scaned AP mWifiList = mWifiManager.getScanResults(); return mWifiList; } public synchronized String getMacAddress() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress(); } return null; } public synchronized String getBSSID() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); } return ""; } public synchronized String getSSID() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID(); } return ""; } public synchronized int getIPAddress() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress(); } return 0; } public synchronized int getNetworkId() { if (mWifiManager.isWifiEnabled()) { mWifiInfo = mWifiManager.getConnectionInfo(); return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId(); } return 0; } public synchronized boolean deleteConfiguration(int netId) { SysLog.out(TAG, "SysManagerWIFIAdmin deleteConfiguration", "start"); boolean b = mWifiManager.removeNetwork(netId); return b; } public synchronized int addNetwork(String ssid, String passwd, int type, String bssid) { SysLog.out(TAG, "SysManagerWIFIAdmin addNetwork", "start"); int status = addNetwork(CreateWifiInfo(ssid, passwd, type, bssid)); return status; } // add net and connect private int addNetwork(WifiConfiguration wcg) { int wcgID = mWifiManager.addNetwork(wcg); SysLog.out(TAG, "SysManagerWIFIAdmin addNetwork(enableNetwork)", "start"+", netID = "+wcgID); boolean b = mWifiManager.enableNetwork(wcgID, true); getConnectionInfo(); return wcgID; } private WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type, String BSSID) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = toHexString(SSID.getBytes()); SysLog.out(TAG, "SysManagerWIFIAdmin addNetwork", "SSID="+config.SSID); if (null == BSSID) { } else { config.BSSID = BSSID; } if ((null != SSID)&&(null != BSSID)) { WifiConfiguration tempConfig = this.IsExsits(SSID,BSSID); if (tempConfig != null) { mWifiManager.removeNetwork(tempConfig.networkId); } } if (TYPE_NO_PASSWD == Type) // WIFICIPHER_NOPASS { config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); } else if (TYPE_WEP == Type) { // WIFICIPHER_WEP config.hiddenSSID = true; int len = Password.length(); if ((len == 10 || len == 26 || len == 58) && Password.matches("[0-9A-Fa-f]*")) { config.wepKeys[0] = Password; } else { config.wepKeys[0] = '"' + Password + '"'; } config.allowedAuthAlgorithms .set(WifiConfiguration.AuthAlgorithm.SHARED); 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; } else if (TYPE_WPA == Type) { // WIFICIPHER_WPA if (Password.matches("[0-9A-Fa-f]{64}")) { config.preSharedKey = Password; } else { config.preSharedKey = '"' + Password + '"'; } config.hiddenSSID = true; config.allowedAuthAlgorithms .set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.TKIP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } else { } return config; } public int isWifiContected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo wifiNetworkInfo = connectivityManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (wifiNetworkInfo.isConnected()) { return WIFI_CONNECTED; } else { return WIFI_CONNECT_FAILED; } } public WifiConfiguration IsExsits(String SSID,String BSSID) { List<WifiConfiguration> existingConfigs = mWifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (null != BSSID && (("\"" + SSID + "\"").equals(existingConfig.SSID))&&(BSSID.equals(existingConfig.BSSID))) { return existingConfig; } } return null; } public synchronized void disconnectWifi(int netId) { mWifiManager.disableNetwork(netId); if(netId == getNetworkId()){ mWifiManager.disconnect(); SysLog.out(TAG, "SysManagerWIFIAdmin disconnectWifi(netID)", "Ap is disconnect = "+netId); } }