我正在研究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();
1 回答
您的应用程序检测到BLE的信标后
如果关闭则打开/启用Wifi .
禁用除"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 .
作为一个表现良好的应用程序,您应该在应用程序退出之前重新启用所有网络配置 .