O Android se conecta ao Open WiFi programaticamente por nome - qual é a melhor solução?

Eu estava tentando usar dois métodos para conectar programaticamente a um wifi aberto (portal conectivo) pelo nome.

Eu usei o op1, mas ele funciona apenas 80% das vezes.

_____________________________________________________

op1:

public static void connectToWifi(Context context, String networkSSID) {

    WifiConfiguration conf = new WifiConfiguration();
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    wifiManager.addNetwork(conf);


    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    for (WifiConfiguration i : list) {
        Log.d(TAG + " |connectToWifi()", "i.SSID=> " + i.SSID);

        if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
            wifiManager.disconnect();
            wifiManager.enableNetwork(i.networkId, true);
            wifiManager.reconnect();

            Log.d(TAG + " |connectToWifi()", "IF > i.SSID=> " + i.SSID);

            break;
        }else {Log.e(TAG + " |connectToWifi()", "ELSE - FAILED TO CONNECT > i.SSID=> " + i.SSID);}
    }
}//end connectToWifi

op2: dehttps://stackoverflow.com/a/8818490/3792198

conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
    if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
         wifiManager.disconnect();
         wifiManager.enableNetwork(i.networkId, true);
         wifiManager.reconnect();               

         break;
    }           
 }

op3:

WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", key);

WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
//remember id
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();

Ou você tem alguma sugestão? obrigado

questionAnswers(1)

yourAnswerToTheQuestion