2015-08-28 48 views
0

我是尝试以编程方式连接到另一个网络。为了测试,我使用nexus 7android 5.1.1。我在这里的代码的一部分,一个改变网络:Android没有重新配置到配置的网络

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

通过这里一切ok,我看到在顶部dissappear的无线网络连接图标,但再次连接时,网络是最后一个,而不是在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 

看来,一切都很好。

执行此代码对外螺纹,我不知道这是否会影响。

我做了一个应用程序来测试我是否做错了,并且该应用程序工作正常,产生的变化很好。

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

谁能告诉我为什么会发生:唯一的区别是执行(Execute)的一个ListView内取得的OnClickListener? Nexus 7的一些配置?我该如何解决它?

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

回答

0

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

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

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