Java-Android-以编程方式连接到wifi

我想以编程方式连接到WiFi网络.

这是我的代码

wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(true);

WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + ssid + "\"";
config.preSharedKey = "\""+ key +"\"";

int netId = wifiManager.addNetwork(config);
wifiManager.saveConfiguration();
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();

当我在手机上启用wifi时,它可以按预期工作,但是问题是禁用wifi时.在这种情况下,唯一的结果是启用wifi适配器,但未连接到网络.启用似乎需要很长时间,因此无法连接.对我来说,另一个奇怪的事情是wifiManager.getConfigurednetworks()返回null.你知道怎么解决吗?

谢谢

解决方法:

It seems like enabling takes to long so it won’t get connected.

是.这是因为网络的启用是异步完成的,它是并行发生的,并且不会立即发生.这是您的问题的两种可能的解决方案:

1)这是最简单的解决方案,但不是最佳解决方案.如另一位用户所述,在循环中检查是否有扫描结果.但是,您应该在循环的每个循环之间添加某种形式的睡眠.即您要等待1毫秒,以免耗尽所有cpu资源.我不确定如何在Android中做到这一点.这种方法还有另一个问题.如果u在GUI线程中,则在等待建立连接时,将以这种方式阻止所有GUI事件.

2)这是正确的解决方案.建立网络连接后,您可以注册广播事件.然后,您将在事件结束时得到一个事件.从此事件中,您可以完成所需的任何操作.

对不起,我急着回答.我不是Android专业人士,因此我无法从头开始解释如何执行此操作的细节,但我认为我至少会为您指明正确的方向.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...