Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-以编程方式连接到wifi_Java_Android_Wifi_Connect - Fatal编程技术网

Java Android-以编程方式连接到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

我想以编程方式连接到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) 这是最简单的解决方案,但不是最好的。循环,如另一个用户所述,检查要输入的扫描结果。但是,您应该在循环的每个周期之间添加某种睡眠。也就是说,您希望等待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个空格,以将其放入
代码标记中