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

如果该SSID已经有另一个WifiConfiguration,Android 6.0无法添加WifiConfiguration,android,wifi,android-wifi,android-6.0-marshmallow,Android,Wifi,Android Wifi,Android 6.0 Marshmallow,Android 6.0对WiFi行为进行了一些更改,它破坏了我的应用程序行为,无法找到解决方案 基本上,对于Android 6.0,不允许修改或删除应用程序未创建的WifiConfiguration对象。这意味着我需要始终创建自己的WifiConfiguration对象。但是,如果用户或其他应用程序已经为特定AP进行了无线配置,则我无法为该AP创建另一个无线配置 addNetwork(wifiConfiguration)返回-1。这适用于所有以前的Android版本,但不适用于Android 6

Android 6.0对WiFi行为进行了一些更改,它破坏了我的应用程序行为,无法找到解决方案

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

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


所以我被卡住了。这是安卓的bug吗?我想,如果许多开发人员为具有自己的WiFi接入点的定制硬件开发应用程序,他们应该会受到这种影响。

是的。它是安卓6.0。错误,它似乎将在新版本中修复


我认为这有帮助……需要做一些修改。。。 并非每次都由应用程序创建的WifiConfiguration对象。该应用程序没有创建另一个对象的权限…因此我们需要与以前的现有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;
}
public void connectToWifi(){
试一试{
WifiManager=(WifiManager)super.getSystemService(android.content.Context.WIFI_服务);
WifiConfiguration wc=新的WifiConfiguration();
WifiInfo WifiInfo=wifiManager.getConnectionInfo();
wc.SSID=“\”网络名称\”;
wc.preSharedKey=“\”密码\”;
wc.status=WifiConfiguration.status.ENABLED;
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wc.allowedKeyManagement.set(wificonfig.keymanagement.WPA\u PSK);
wc.allowedPairwisecipher.set(WifiConfiguration.Pairwiseciper.CCMP);
wc.allowedPairwisecipher.set(WifiConfiguration.Pairwiseciper.TKIP);
AlloweGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
AlloweGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
AlloweGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
AlloweGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiManager.setWifiEnabled(true);
int netId=wifiManager.addNetwork(wc);
如果(netId=-1){
netId=getExistingNetworkId(SSID);
}
wifiManager.disconnect();
wifiManager.enableNetwork(netId,true);
wifiManager.reconnect();
}捕获(例外e){
e、 printStackTrace();
}
}
私有int getExistingNetworkId(字符串SSID){
WifiManager=(WifiManager)super.getSystemService(Context.WIFI_服务);
List configuredNetworks=wifiManager.getConfiguredNetworks();
if(configuredNetworks!=null){
对于(现有的WifiConfiguration-existingConfig:configuredNetworks){
if(existingConfig.SSID.equals(SSID)){
返回existingConfig.networkId;
}
}
}
返回-1;
}

并在清单文件中添加权限…

认为这与此bug+合并的one@Catalin,你是如何解决这个问题的?我们正面临着完全相同的问题。Android的默认wifi扫描仪为我们的wifi网络创建了一个wifi配置,因此现在我们的应用程序无法再连接到它。我怎样才能重新控制自己的网络?不。Android团队似乎认为这种行为是正确的。