如何以编程方式忘记android中的无线networking?

我正在一个应用程序哪个wifi,在那里用户将被要求input他select的扫描networking的密码,如果用户input正确的密码,它连接和运作良好。 但是当用户input错误的密码时,会添加一个新的networking名称,并且将无法validation错误的密码,因此会出现身份validation问题。

现在,如果用户试图再次扫描并select相同的networking,并input正确的密码,即使密码现在正确并且将具有禁用状态,但由于之前的连接仍显示身份validation问题状态,因此无法连接。

如何解决这个问题呢? 有没有办法忘记所有使用ConnectivityManager或wifimanager的networking? 还是其他解决scheme?

Solutions Collecting From Web of "如何以编程方式忘记android中的无线networking?"

WifiManager源代码有这样的方法:

 /* * Delete the network in the supplicant config. * * This function is used instead of a sequence of removeNetwork() * and saveConfiguration(). * * @param config the set of variables that describe the configuration, * contained in a {@link WifiConfiguration} object. * @hide */ public void forgetNetwork(int netId) { if (netId < 0) { return; } mAsyncChannel.sendMessage(CMD_FORGET_NETWORK, netId); } 

但是这个方法是@hide ,所以我们不能使用它。 但根据这个评论:

这个函数被用来代替removeNetwork()saveConfiguration()的序列

你可以尝试使用: removeNetwork()saveConfiguration()来代替。

是的, removeNetwork()作品。 我用这个删除所有的networking。

 List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); for( WifiConfiguration i : list ) { wifiManager.removeNetwork(i.networkId); wifiManager.saveConfiguration(); } 

您可以使用removeNetwork()方法删除冗余networking连接(尽pipe我怀疑它们是否具有相同的netId ),然后添加新连接以避免出现问题。

通过这样做,可以获得configuration在列表中的networking列表,然后立即执行删除并保存。

 WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); for( WifiConfiguration i : list ) { wifiManager.removeNetwork(i.networkId); wifiManager.saveConfiguration(); } 
 wifiManager.saveConfiguration(); 

在Android M中被删除。不再需要调用saveConfiguration,因为removeNetwork(int)已经自动保留configuration。

https://developer.android.com/reference/android/net/wifi/WifiManager.html#saveConfiguration(&#xFF09;