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

来源:互联网 发布:鼻行动物存在吗 知乎 编辑:程序博客网 时间:2024/06/06 14:25

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

原创粉丝点击