0

While using this to connect to an open WiFi network (that is not configured yet on the device):

public static void connectToWifiNetwork(Context context, final String ssid, String password) {
    final WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    wifiManager.disconnect();

    // Delete already available network
    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    for (WifiConfiguration i : list) {
        if(i.SSID != null && i.SSID.equals("\"" + ssid + "\"")) {
            Log.i(TAG, "Deleting configuration for " + ssid);
            wifiManager.removeNetwork(i.networkId);

            break;
        }
    }

    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"" + ssid + "\"";
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    Log.d(TAG, "Added network " + ssid + " " + password);
    final int addNetworkResult = wifiManager.addNetwork(conf);

    new Thread(new Runnable() {
        @Override
        public void run() {
            Log.d(TAG, "Attempting to connect to " + ssid + " with id " + addNetworkResult);
            wifiManager.enableNetwork(addNetworkResult, true);
        }
    }).start();
}

On Nexus 5 with API 23 (6.0.1), the added network has result -1, does not connect. On Nexus 5X with API 26 (8.0.0), the added network has result 2, connects fine.

I am building for target API 25.

I am not sure if it is about the API level or the device, but I'd like to have a solution to rule them all.

Any ideas?

Edit: Also tried with ALL the configurations as in this SO question:

conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
conf.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
conf.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
conf.allowedAuthAlgorithms.clear();
conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
conf.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

Didn't work on Nexus 5 as well. Note: I can connect to WEP/WPA/WPA2 programmatically using both devices by using this implementation.

zed
  • 3,180
  • 3
  • 27
  • 38

1 Answers1

0

For some reason, I had to manually delete the open network from Android's WiFi settings (even though connecting through it works fine). It now connects, but not every time.

It disconnects from current network, tries to connect to the open network, then connects to the previous network again.

zed
  • 3,180
  • 3
  • 27
  • 38