我尝试以编程方式连接到另一个网络。为了测试,我正在使用 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的一些配置?我该如何解决?
编辑:如果有必要,我可以发布保留代码,但它有点广泛。
答案 0 :(得分:0)
好吧,经过一些测试和阅读WifiManager
的文档,而不是断开连接并重新连接wifi,我使用了方法wifiManager.reassociate()
。
这对我有用,我认为这比断开wifi更好,因为你试图连接到另一个WiFi网络,在enableNetwork(i.networkId, true)
上描述并且当前连接已被排除。
使用其他方法,出于某种原因,虽然我禁用了其他网络,但设备没有连接到我想要的网络。