Java Android-以编程方式连接到wifi
我想以编程方式连接到WiFi网络 这是我的密码:Java Android-以编程方式连接到wifi,java,android,wifi,connect,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
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) 这是最简单的解决方案,但不是最好的。循环,如另一个用户所述,检查要输入的扫描结果。但是,您应该在循环的每个周期之间添加某种睡眠。也就是说,您希望等待1ms,以免耗尽所有CPU资源。我不知道如何在Android上做到这一点。这种方法还有一个问题。如果u在GUI线程中,则在等待建立连接时,将以这种方式阻止所有GUI事件
2) 这是正确的解决办法。您可以在建立网络连接后注册广播事件。当它结束时,你将得到一个事件。通过此事件,您可以完成所需的任何操作
对不起,我的回答太仓促了。我不是安卓专业人士,因此我无法在脑海中解释如何实现这一点的细节,但我想我至少会为您指出正确的方向。事实上,如果您多次连接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);
}
我还发现变量netId为-1,所以添加网络失败,我不知道为什么。请看一看这个,我想这可能会完成你的工作。嘿,。。。我也是@Tomášýerný,。。。那么如何解决呢?。。。。。。。对于延迟和wifi网络,我使用以下代码。。。。。。。{wifi(SSID,PASS);最终处理程序Handler=new Handler();Handler.postDelayed(new Runnable(){Override public void run(){forget();}},3000);final handler1=new Handler();handler1.postDelayed(new Runnable(){Override public void run(){wifi(SSID,PASS);}}},3000);}欢迎使用堆栈溢出!我已经编辑了你的问题。在此处发布代码时,将其缩进4个空格,以将其放入
代码标记中
。