Android Connect打开WiFi - 在Nexus 5和Nexus 5X之间分段

时间:2017-09-28 10:04:03

标签: android android-wifi

使用此功能连接到开放的WiFi网络(尚未在设备上配置):

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();
}

在带有API 23(6.0.1)的Nexus 5上,添加的网络结果为-1,未连接。 在带有API 26(8.0.0)的Nexus 5X上,添加的网络结果为2,连接正常。

我正在为目标API 25构建。

我不确定它是关于API级别还是设备,但我希望有一个解决方案来统治它们。

有什么想法吗?

编辑: 还尝试使用此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);

也不适用于Nexus 5。 注意:我可以使用this implementation.

使用这两种设备以编程方式连接到WEP / WPA / WPA2

1 个答案:

答案 0 :(得分:0)

出于某种原因,我不得不从Android的WiFi设置手动删除开放网络(即使连接通过它工作正常)。它现在连接,但不是每次都连接。

它与当前网络断开连接,尝试连接到开放网络,然后再次连接到以前的网络。