2011-05-26 89 views
7

我想知道是否有一些代码片段可用于连接Android设备到WiFi网络。网络应该是打开的或WEP/WPA已加密,并且该设备可见。通常,我们使用GUI界面输入WiFi密码并点击连接按钮。我想将密码存储在一个地方,并使用密码无缝连接到网络,无需人工干预。那可能吗?非常感谢。Android连接WiFi无需人工干预

回答

2

WifiManager - 你有没有试过看这里。 addNetwork()方法看起来像它可以做你想做的事情。你所要做的就是将信息放在WifiConfiguration类中,然后添加网络,然后启用该连接。文档就在那里。

1

结帐它可以用来启用WiFi的“WifiManager”

的文档:

WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(true); 

,它可以用来做很多其他的事情。

编辑:不要忘了监控和改变无线网络连接状态何时更新您的权限,例如:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

等等

14

谢谢你们。在您的帮助下,我现在可以无痛连接到WPA/PSK加密网络。这里是我的代码片段:

 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     // setup a wifi configuration 
     WifiConfiguration wc = new WifiConfiguration(); 
     wc.SSID = "\"YOUR_SSID\""; 
     wc.preSharedKey = "\"YOUR_PASSWORD\""; 
     wc.status = WifiConfiguration.Status.ENABLED; 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
     wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
     wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
     wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
     wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
     wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
     // connect to and enable the connection 
     int netId = wifiManager.addNetwork(wc); 
     wifiManager.enableNetwork(netId, true); 
     wifiManager.setWifiEnabled(true); 

的招数是:

  • SSID字符串应该与包围“这是由\表示”
  • addNetwork()方法默认禁用添加的网络,所以你应该使用enableNetwork()方法来启用它。
+0

它解决了我的问题!谢谢 – Shatazone 2012-01-23 11:40:24

+0

令人惊叹的解决方案!任何想法如何找出输入的密码是否错误?我试图添加一个尝试捕获,但它不工作,密码保存到WiFi网络,并再次连接到它的唯一方法是忘记网络或更改密码 – Zame 2016-03-13 17:24:04

3

为了让OP的示例代码的工作,我必须增加一个行:

wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 

如果没有这条线,它只是将无法连接到网络。接受并添加配置,但不进行连接尝试。我实际上在logcat窗口中收到以下消息:

Event [WPA: Failed to select WPA/RSN] android 

这使我找到最终解决方案,弄清楚为什么它不适用于我。