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

标签 java android wifi connect

我想以编程方式连接到 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) 这是最简单的解决方案,但不是最好的。正如另一位用户所描述的循环检查扫描结果的传入。但是,您应该在循环的每个周期之间添加某种 sleep 。 IE。你要等待1ms,以免耗尽所有CPU资源。我不知道如何在 Android 中做到这一点。这种方法还有一个问题。如果您在 GUI 线程中,则在等待建立连接时,您将以这种方式阻止所有 GUI 事件。

2) 这是正确的解决方案。您可以在建立网络连接后注册广播事件。然后,当它完成时,您将收到一个事件。通过此事件,您可以完成执行所需的任何操作。

抱歉这么仓促的回答。我不是 Android 专业人士,所以我无法立即解释如何执行此操作的详细信息,但我想我至少会为您指出正确的方向。

关于java - Android - 以编程方式连接到wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61280160/

相关文章:

java - 是否可以对未初始化的变量执行检查?

java - 如何在 onReceive() 中关闭 Activity

c++ - boost::asio 在没有 WLAN 的情况下无法连接到本地主机

bluetooth - Android Things 中的 WiFi P2P 网络

ios - 保持连接到具有强制门户的 wifi 网络

java - 对于参数类型 void、void,运算符 > 未定义

java - JAR多重下载

java - 如何从嵌套的ArrayList中获取JSONObject的属性并将其显示给ListView?

Android App 编译不生成包资源

java - Java 中 Apache FOP 的 XSL 错误