我想以编程方式连接到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。你知道如何解决这个问题吗?
谢谢
答案 0 :(得分:5)
似乎启用需要很长时间,因此无法连接。
是。这是因为网络的启用是异步的,它是并行发生的,并且不会立即发生。以下是您的问题的两种可能解决方案:
1)这是最简单的解决方案,但不是最好的解决方案。如另一个用户所描述的那样循环检查扫描结果是否进入。但是,您应该在循环的每个循环之间添加某种类型的睡眠。 I.E.你想等待1ms,以免吃掉所有的CPU资源。我不知道如何在Android中做到这一点。这种方法还有另一个问题。如果您在GUI线程中,则在等待建立连接时,将以这种方式阻止所有GUI事件。
2)这是正确的解决方案。建立网络连接后,您可以注册广播事件。然后你会在完成后得到一个事件。通过此活动,您可以完成所需的任何操作。
很抱歉匆忙的回答。我不是Android专家,所以我无法解释如何做到这一点的细节,但我认为我至少会指出你正确的方向。
答案 1 :(得分:-1)
实际上,如果您连接多次WiFi,它将解决您的问题。
另外一件事我看到如果我的WiFi已启用并且我连接到特定的WiFi网络,那么它正在工作。
另一件事,当我从移动网络切换到特定的WiFi网络然后它提供不稳定的连接..对于这个问题我通过特定的WiFi网络连接WiFi,然后在3秒延迟后忘记网络我再次连接。然后它正常工作。
我使用此代码连接到WiFi。
对于延迟和获得WiFi网络,我使用此代码...... .......
{
wifi(SSID,PASS);
final Handler handler = new Handler();
handler.postDelayed(
new Runnable()
{
Override public void run() { forgot(); }
}, 3000);
final Handler handler1 = new Handler();
handler1.postDelayed(
new Runnable()
{
Override public void run() {wifi(SSID,PASS); }
}, 3000);
}