Android无法重新配置已配置的网络

时间:2015-08-28 11:19:29

标签: java android android-wifi

尝试以编程方式连接到另一个网络。为了测试,我正在使用 nexus 7 android 5.1.1 。我在这里介绍一部分代码,一个改变网络:

        final String qu = "\"";
        final String MC_SSID = qu + SSID + qu;
        final String MC_PASS = qu + "mypass" + qu;

        Log.d(TAG,"Conecting to " + MC_SSID + " : " + MC_PASS);

        WifiConfiguration conf = new WifiConfiguration();
        conf.SSID = MC_SSID;
        conf.preSharedKey = MC_PASS;

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

        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            Log.d(TAG,"WifiConf -> " + i.SSID);
            if(i.SSID != null && i.SSID.equals(MC_SSID)) {
                Log.d(TAG,"I\'m going to connect to " + i.SSID);
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);
                wifiManager.reconnect();

                break;
            }
        }

通过这里一切正常,我看到顶部的WiFi图标消失,但再次连接时,网络是最后一个而不是wifiManager 上配置的网络。

对于另一项测试,我使用了另一家公司的另一台平板电脑,它运行良好。

记录输出

08-28 13:00:45.174  25525-27323/com.urbanclouds.airsenseiv4 D/UpdateInformation﹕ Conecting to "My-SSID" : "mypass"
08-28 13:00:45.269  25525-27323/com.urbanclouds.airsenseiv4 D/UpdateInformation﹕ WifiConf -> "My-SSID"
08-28 13:00:45.269  25525-27323/com.urbanclouds.airsenseiv4 D/UpdateInformation﹕ I\'m going to connect to My-SSID

似乎一切都很好。

外部线程 执行,我不知道这是否会影响。

我做了一个应用程序来测试我是否做错了,并且应用程序正常运行并且更改效果很好。唯一的区别是在ListView中的OnClickListener上执行:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if ( adapter.getItem(position) != null) {
        final String qu = "\"";
        final String MC_SSID = qu + adapter.getItem(position) + qu;
        final String MC_PASS = qu + "mypass" + qu;

        Log.d(TAG,"Conecting to " + MC_SSID);

        WifiConfiguration conf = new WifiConfiguration();
        conf.SSID = MC_SSID;
        conf.preSharedKey = MC_PASS;

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

        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            Log.d(TAG,"WifiConf -> " + i.SSID);
            if(i.SSID != null && i.SSID.equals(MC_SSID)) {
                Log.d(TAG,"Voy ha realizar la reconexion");
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);
                wifiManager.reconnect();

                break;
            }
        }
    }
}

谁能告诉我为什么会这样? Nexus 7的一些配置?我该如何解决?

编辑:如果有必要,我可以发布保留代码,但它有点广泛。

1 个答案:

答案 0 :(得分:0)

好吧,经过一些测试和阅读WifiManager的文档,而不是断开连接并重新连接wifi,我使用了方法wifiManager.reassociate()

这对我有用,我认为这比断开wifi更好,因为你试图连接到另一个WiFi网络,在enableNetwork(i.networkId, true)上描述并且当前连接已被排除。

使用其他方法,出于某种原因,虽然我禁用了其他网络,但设备没有连接到我想要的网络。