Android - 编程连接WiFi

3

我希望能够通过程序连接到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。你知道如何解决吗?

谢谢


我还发现变量netId的值为-1,因此添加网络失败,但我不知道原因。 - Tomáš Černý
请查看此链接:https://dev59.com/aG855IYBdhLWcg3wYjOF#4374934。我认为这可能会解决你的问题。 - Talha Q
嘿,我也遇到了@TomášČerný,那么该怎么解决呢? - gumuruh
2个回答

5
似乎启用需要太长时间,因此它无法连接。是的。这是因为网络启用是异步完成的,它在并行处理中发生,并不会立即发生。以下是解决问题的两种可能方法:1)这是最简单但不是最好的解决方案。像另一个用户描述的那样循环检查扫描结果。但是,您应该在每个循环周期之间添加一些休眠。也就是说,您希望等待1ms,以便不消耗所有CPU资源。我不确定如何在Android中立即执行此操作。使用此方法还存在另一个问题。如果您在GUI线程中,则将通过此方式阻止所有GUI事件,因为您等待建立连接。2)这是正确的解决方案。在网络连接建立后,您可以注册广播事件。然后,当它完成时,您将收到一个事件。从此事件中,您可以完成所需的任何操作。抱歉回答匆忙。我不是Android专家,因此无法立即解释如何执行此操作的详细信息,但我想至少指出正确的方向。

-1

实际上,如果您连接WiFi超过一次,它将解决您的问题。

我还发现一件事情,就是当我的WiFi启用时,我连接到特定的WiFi网络,然后它能正常工作。

另外一件事情是,当我从移动网络切换到特定的WiFi网络时,它会给出一个不稳定的连接。针对这个问题,我通过一个特定的WiFi网络连接WiFi,然后在三秒延迟后忘记该网络,之后再次连接。这样就可以正常工作了。

我使用以下代码连接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);
} 

对于延迟和无法连接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);} - user7212280
欢迎来到 Stack Overflow!我已经编辑了你的问题。在这里发布代码时,请缩进4个空格以获得 code markdown 格式。 - S.L. Barth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接