安卓移除/忘记已保存的WiFi密码

先说答案
高版本用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);
        List wifiConfigs = 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(查看的时候显示“已保存”)

你可能感兴趣的:(android,WiFi)