Android连接到WiFi而无需人工干预

时间:2011-05-26 15:35:37

标签: android wifi hci

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

4 个答案:

答案 0 :(得分: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()方法启用它。

答案 1 :(得分:3)

为了使OP示例代码工作,我不得不再添加一行:

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

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

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

这让我找到了最终的解决方案,弄清楚它为什么不适合我。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

查看“WifiManager”

的文档

它可用于启用wifi:

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

它可以用来做许多其他事情。

编辑:在监控和更改wifi状态时不要忘记更新权限,例如:

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

等...