在我的應用程序中,我有一個網絡選擇屏幕,顯示所有可見網絡 - 包括已配置隱藏SSID。Android - WiFi Association禁用隱藏WiFi配置
但是,當用戶選擇不是隱藏SSID的可見網絡,並使用以下代碼將其關聯到該網絡。
public boolean associate(ScanResultWrapper scanResult){
WifiConfiguration wc = getWifiConfiguration(scanResult.scanResult);
int id = -1;
if (wc == null) {
wc = new WifiConfiguration();
wc.SSID = "\"" + scanResult.SSID + "\"";
wc.BSSID = scanResult.scanResult.BSSID;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
id = mWifiManager.addNetwork(wc);
if (!mWifiManager.saveConfiguration()){
return false;
}
} else{
id = wc.networkId;
}
boolean result;
try {
result = mWifiManager.enableNetwork(id, true);
return result;
} catch (Throwable t) {
t.printStackTrace();
return false;
}
}
所以該方法關聯到這裏http://developer.android.com/reference/android/net/wifi/WifiManager.html#enableNetwork(int所示的網絡中,布爾值)
mWifiManager.enableNetwork(id, true);
禁止所有其它配置。這對於非隱藏的SSID是可以的,但這意味着我的隱藏SSID配置被禁用,並且不再包含在掃描結果中。這意味着如果用戶在隱藏網絡上並加入另一個網絡,則除非他們啓動他們的設備Wifi設置,否則他們不能回去加入他們的隱藏網絡。
我發現以編程方式更改Wifi網絡的上述方法必須與設備Wifi設置使用的方法不同。如果您以編程方式關聯,則進入Wifi Settings屏幕,您將看到所有其他Configured Networks已被設置爲「Disabled」。但是,如果您從設備Wifi設置屏幕關聯到網絡,則所有其他Wifi配置保持「保存」狀態。
有沒有人有一種替代的方法,以編程方式關聯到保留隱藏SSID配置的網絡而不禁用它們?
謝謝,這是一個真正的痛苦。