8

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

4

4 回答 4

15

多谢你们。在您的帮助下,我现在可以轻松连接到 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() 方法启用它。
于 2011-05-27T07:36:54.427 回答
3

为了使 OP 示例代码正常工作,我必须再添加一行:

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

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

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

这让我找到了最终的解决方案,弄清楚为什么它对我不起作用。

于 2011-07-03T17:27:24.493 回答
2

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

于 2011-05-26T15:42:53.863 回答
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" />

ETC...

于 2011-05-26T15:46:05.723 回答