Android 6:以编程方式连接到特定的wifi网络无法正常工作

chi*_*ira 4 android wifi wifimanager android-6.0-marshmallow

我试图通过提供SSID并使用WifiManager配置传递来连接到wifi网络.

基于此线程解决方案: 如何以编程方式连接到Android中的特定Wi-Fi网络?

调用重新连接方法.但没有任何事情发生(没有连接).

是什么版本的Android版本(6.0.1)?如果是,那么如何在Android 6上以编程方式执行网络连接?

Sin*_*gam 11

自Android Marshmallow以来,关于如何连接到WiFi网络的一些事情发生了变化.以下代码将帮助您......如果您使用的是Android 6.0或低级版本......

public void connectToWifi(){
    try{
        WifiManager wifiManager = (WifiManager) super.getSystemService(android.content.Context.WIFI_SERVICE);
        WifiConfiguration wc = new WifiConfiguration();
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        wc.SSID = "\"NETWORK_NAME\"";
        wc.preSharedKey = "\"PASSWORD\"";
        wc.status = WifiConfiguration.Status.ENABLED;
        wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

        wifiManager.setWifiEnabled(true);
        int netId = wifiManager.addNetwork(wc);
        if (netId == -1) {
            netId = getExistingNetworkId(wc.SSID);
        }
        wifiManager.disconnect();
        wifiManager.enableNetwork(netId, true);
        wifiManager.reconnect();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
private int getExistingNetworkId(String SSID) {
    WifiManager wifiManager = (WifiManager) super.getSystemService(Context.WIFI_SERVICE);
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
    if (configuredNetworks != null) {
        for (WifiConfiguration existingConfig : configuredNetworks) {
            if (existingConfig.SSID.equals(SSID)) {
                return existingConfig.networkId;
            }
        }
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

并在Manifest文件中添加权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)


小智 3

使用addNetwork 添加wifi 配置,然后使用enableNetwork 连接到它。

    WifiConfiguration wificonfiguration = new WifiConfiguration();
    StringBuffer stringbuffer = new StringBuffer("\"");
    stringbuffer.append((new StringBuilder(String.valueOf(HOTSPOT_NAME))).append("\"").toString());
    wificonfiguration.SSID = stringbuffer.toString();
    wificonfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
    wificonfiguration.allowedAuthAlgorithms.set(0);
    wificonfiguration.status = 2;
    wificonfiguration.preSharedKey = "\"" + HOTSPOT_PASSWORD + "\"";

    int networkId_ = wifi.addNetwork(wificonfiguration);

    if(networkId>-1){

           boolean status = wifi.enableNetwork(networkId_, true);

    }
Run Code Online (Sandbox Code Playgroud)

对于棉花糖:仅当您创建了 WifiConfiguration 对象时,您的应用程序现在才可以更改这些对象。您不得修改或删除用户或其他应用程序创建的 WifiConfiguration 对象。 有关棉花糖的更多信息