先说答案
高版本用wifiManager.forget,低版本用wifiManager.removeNetwork+wifiManager.saveConfiguration
网络跟集体失忆了似的。
好不容易搜出来用wifiManager.forget可以忘记wifi密码,结果由于我使用的是安卓4.4.4,并没有forget这个方法。然后就去百度(不要问我为什么不用谷歌,最近难难于上青天),结果一点点有用的信息都毛有。还好我还没笨死,点进去WifiManager源码看了下(我下载的sdk是高版本的,app使用的是低版本),确实是有forget方法的。在forget方法的注释里我发现了一句话——
* This function is used instead of a sequence of removeNetwork()
* and saveConfiguration().
搞定了,撒花,欧耶
附安卓4.4.4下如何移除一个wifi密码
NetUtil中
/**
* 忘记某一个wifi密码
*
*@param wifiManager
*@param targetSsid
*/
public static void removeWifiBySsid(WifiManager wifiManager, String targetSsid) {
Log.d(TAG, "try to removeWifiBySsid, targetSsid=" + targetSsid);
ListwifiConfigs = wifiManager.getConfiguredNetworks();
for (WifiConfiguration wifiConfig : wifiConfigs) {
String ssid = wifiConfig.SSID;
Log.d(TAG, "removeWifiBySsid ssid=" + ssid);
if (ssid.equals(targetSsid)) {
Log.d(TAG, "removeWifiBySsid success, SSID = " + wifiConfig.SSID + " netId = " + String.valueOf(wifiConfig.networkId));
wifiManager.removeNetwork(wifiConfig.networkId);
wifiManager.saveConfiguration();
}
}
}
上层调用的地方这样写
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
String ssid= "想要移除的wifi名称,区分大小写";
//wifi名需要被双引号裹起来,因为wifiConfig.SSID的值是带双引号的,如果这里不想带引号,下面判断是否相等的那里就需要带上引号
NetUtil.removeWifiBySsid(wifiManager, "\"" + ssid + "\"");
再P个S
建议在connectWifi之前都先忘记一次,否则会出现一个难以察觉的bug,就是系统记录了原来输错的一个密码,那么无论你connectWifi多少次,wifi名和密码有多正确,都无法连上wifi(查看的时候显示“已保存”)