Android 连接 WiFi 无需人工交互

问题描述 投票:0回答:4

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

android wifi
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()方法启用它。

3
投票

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

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

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

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

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


2
投票

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


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" />

等等...

© www.soinside.com 2019 - 2024. All rights reserved.