我正在研究Android应用程序,它涉及连接一个没有密码的特定WiFi SSID。每当用户进入房屋应用程序时,通过BLE检测特定信标。之后该应用尝试使用WifiManager连接应用代码中编程的WiFi。 我在这里面临一些问题: 1)如果WiFi已在手机中禁用 - 应用程序启用WiFi并尝试连接到已配置的WiFi(可能是按字母顺序)。在这种情况下,它可以连接另一个可用的并在手机中配置的WiFi,而不是连接到我的SSID。
2)如果在手机中启用了WiFi:如果WiFi已启用,请重新连接到我的SSID,这是正确的。
3)WiFi已禁用且我的SSID未在手机中配置。它不会连接到WiFi。
病例1和3真的很头疼。我如何在计划中做,请参阅代码:// wifi
WifiManager wifiManager= (WifiManager) getSystemService(Context.WIFI_SERVICE);
// setup a wifi configuration
WifiConfiguration wc= new WifiConfiguration();
wc.SSID = "\"mySSID\"";
wc.status = WifiConfiguration.Status.ENABLED;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
// connect to and enable the connection
int netId = wifiManager.addNetwork(wc);
wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
wifiManager.reconnect();
答案 0 :(得分:0)
您的应用检测到来自BLE的信标后
禁用除“Wi-fi SSID”之外的所有其他网络配置。您应该使用networkId来标识配置。禁用配置的API为https://developer.android.com/reference/android/net/wifi/WifiManager.html#disableNetwork(int)或者您可以在使用https://developer.android.com/reference/android/net/wifi/WifiManager.html#enableNetwork()启用网络时停用所有其他配置
如果SSID可用,您将连接到您的SSID。
作为一个表现良好的应用,您应该在应用退出之前重新启用所有网络配置。