繁体   English   中英

Android - 以编程方式连接到 wifi

[英]Android - connect to wifi programmatically

我想以编程方式连接到 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。 你知道如何解决这个问题吗?

谢谢

似乎启用需要很长时间,因此无法连接。

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

1) 这是最简单的解决方案,但不是最好的。 循环如另一位用户检查要进入的扫描结果所描述的那样。但是,您应该在循环的每个循环之间添加某种睡眠。 IE要等待1ms,以免吃光所有的CPU资源。 我不确定如何在 Android 中做到这一点。 这种方法还有一个问题。 如果您在 GUI 线程中,您将在等待建立连接时以这种方式阻止所有 GUI 事件。

2)这是正确的解决方案。 您可以在建立网络连接后注册广播事件。 然后当它完成时你会得到一个事件。 从这个事件你可以完成执行任何需要的操作。

抱歉匆忙回答。 我不是 Android 专业人士,所以我无法解释如何做到这一点的细节,但我想我至少会为您指明正确的方向。

实际上,如果您多次连接 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);
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM