这简直要了我的命,任何帮助将不胜感激。
我想使用 wifi 管理器连接到开放网络。我遇到的问题是该代码声称连接到任何网络 - 甚至是不存在的网络。下面是执行并使用网络 SSID 调用的完整代码。无论您传递给它什么字符串作为网络的 SSID,即使不存在任何形状或形式的此类网络,enableNetwork 声明都会返回 true,我认为这意味着它已连接到该网络。
我需要做的是确保我有联系。因此,如果我传递的网络 SSID 不存在(例如,超出范围),则 API 在尝试连接时应返回失败。
任何想法/提示/建议将不胜感激。
public boolean conto (String network){
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> configs = null;
int inetId = -1;
// make sure there are no funny stuff in the config
configs = wifi.getConfiguredNetworks();
for (WifiConfiguration config : configs) {
wifi.removeNetwork(config.networkId);
Log.d("********", "Removed Network: SSID=[" + config.SSID + "] and ID=[" + config.networkId + "]");
}
// Now add the network
wifiConfiguration.SSID = "\"" + network + "\"";
wifiConfiguration.hiddenSSID = false;
//wifiConfiguration.priority = 1;
//wifiConfiguration.networkId = 999;
inetId = wifi.addNetwork(wifiConfiguration);
if(inetId < 0) {
Log.d("********", "Could Not Add Network......... [" + wifiConfiguration.SSID + "]");
}
else {
Log.d("********", "Added Network......... [" + wifiConfiguration.SSID + "]");
// Lets be paranoid and double check the config file
Log.d("********", " +++++++++++++++++++++++++ This is what I have in Config File");
configs = wifi.getConfiguredNetworks();
for (WifiConfiguration config : configs) {
Log.d("********", "In the Config file after add, SSID=[" + config.SSID + "], ID=[" + config.networkId + "]");
}
// Now Enable the network
boolean successConnected = wifi.enableNetwork(inetId, true);
//boolean successAssociated = wifi.reassociate(); This did not change the results
if(successConnected) {
Log.d("********", "Connected to......... [" + inetId + "]");
}
else {
Log.d("********", "Could Not Connect to......... [" + inetId + "]");
}
}
return false;
}
我认为问题在于您的代码基于这样的假设:连接到 WiFi 网络是一个同步过程,但事实并非如此。方法enableNetwork()
连接发生时不会阻塞,然后返回连接成功或失败的结果,它会立即返回,结果只是请求是否正确到达 WiFi 服务和请求者。
如果您想了解设备的连接状态,则需要监控WifiManager. SUPPLICANT_STATE_CHANGED_ACTION
and WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION
广播意图动作BroadcastReceiver
。一旦您启动连接过程,这些回调将告诉您事情的进展情况。例如,如果您传入一个不存在的网络,则连接状态几乎应立即直接变为“DISCONNECTED”。而一个有效的网络会经历关联、认证、连接的过程。所有这些步骤都是通过这些广播枚举的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)