Android 6.0如果该SSID已有另一个WifiConfiguration,则无法添加WifiConfiguration

Android 6.0对WiFi的行为做了一些改变,它打破了我的应用行为,并找不到解决scheme。

基本上,对于Android 6.0,您不允许修改或删除不是由您的应用程序创build的WifiConfiguration对象。 这意味着我需要始终创build我自己的WifiConfiguration对象。 但是,如果用户或其他应用程序已经为某个特定的AP设置了WifiConfiguration,则无法为该AP创build另一个AP。

wifiManager.addNetwork(wifiConfiguration)返回-1。 这适用于所有以前的Android版本,但不适用于Android 6.0

所以我卡住了。 这是一个Android的错误? 我想如果开发具有自己的WiFi接入点的定制硬件的应用程序,许多开发人员应该忍受这一点。

Solutions Collecting From Web of "Android 6.0如果该SSID已有另一个WifiConfiguration,则无法添加WifiConfiguration"

是。 这是一个Android 6.0。 错误,它似乎将被修复在一个新的版本。

https://code.google.com/p/android/issues/detail?id=192622

我认为这有助于….需要进行一些更改… Wificonfiguration对象不是由您的应用程序每次创build的。 该应用程序没有权限创build另一个对象…所以我们需要连接到以前的现有netID。

public void connectToWifi(){ try{ WifiManager wifiManager = (WifiManager) super.getSystemService(android.content.Context.WIFI_SERVICE); WifiConfiguration wc = new WifiConfiguration(); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); wc.SSID = "\"NETWORK_NAME\""; wc.preSharedKey = "\"PASSWORD\""; wc.status = WifiConfiguration.Status.ENABLED; wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); wifiManager.setWifiEnabled(true); int netId = wifiManager.addNetwork(wc); if (netId == -1) { netId = getExistingNetworkId(SSID); } wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); } catch (Exception e) { e.printStackTrace(); } } private int getExistingNetworkId(String SSID) { WifiManager wifiManager = (WifiManager) super.getSystemService(Context.WIFI_SERVICE); List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks(); if (configuredNetworks != null) { for (WifiConfiguration existingConfig : configuredNetworks) { if (existingConfig.SSID.equals(SSID)) { return existingConfig.networkId; } } } return -1; } 

并在Manifest文件中添加权限也…