鍍金池/ 問答/Android  網絡安全/ android 連接指定SSID 的無密碼Wifi ,連接不上

android 連接指定SSID 的無密碼Wifi ,連接不上

1.代碼 addNetwork并沒有把網絡添加保存,也無法連接了

public static WifiConfiguration configWifiInfo(Context context, String SSID, String password, int type) {
        WifiConfiguration config = null;
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        if (mWifiManager != null) {
            List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
            for (WifiConfiguration existingConfig : existingConfigs) {
                if (existingConfig == null) continue;
                if (existingConfig.SSID.equals("\"" + SSID + "\"")  /*&&  existingConfig.preSharedKey.equals("\""  +  password  +  "\"")*/) {
                    config = existingConfig;
                    break;
                }
            }
        }
        if (config == null) {
            config = new WifiConfiguration();
        }
        config.allowedAuthAlgorithms.clear();
        config.allowedGroupCiphers.clear();
        config.allowedKeyManagement.clear();
        config.allowedPairwiseCiphers.clear();
        config.allowedProtocols.clear();
        config.SSID = "\"" + SSID + "\"";
        // 分為三種情況:0沒有密碼1用wep加密2用wpa加密
        if (type == 0) {// WIFICIPHER_NOPASSwifiCong.hiddenSSID = false;
           // config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            Log.d("TAG1:", "configWifiInfo: 進入0 ");
            config.wepKeys[0] = "";
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        } else if (type == 1) {  //  WIFICIPHER_WEP
            config.hiddenSSID = true;
            config.wepKeys[0] = "\"" + password + "\"";
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.SHARED);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.WEP104);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        } else if (type == 2) {   // WIFICIPHER_WPA
            config.preSharedKey = "\"" + password + "\"";
            config.hiddenSSID = true;
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.CCMP);
            config.status = WifiConfiguration.Status.ENABLED;
        }
        return config;
    }
WifiConfiguration configuration=WifiTest.configWifiInfo(getApplicationContext(),"ee929","",0);
                  
                 
                    int netId = configuration.networkId;
                    if (netId == -1) {
                        netId = mWifiManager.addNetwork(configuration);
                    }
                    mWifiManager.enableNetwork(netId, true);
回答
編輯回答
醉淸風
"\"" + SSID + "\""

這是干啥???
你傳進來的就是 String SSID ,為何還要做隱式轉換成String
轉換就轉換吧,為啥要這么寫?
這么寫最后SSID是啥?
SSID = "\"" + "ee929" + "\"" = ""ee929"" ???


建議你在
int netId = configuration.networkId;
插入log,打印下你的SSIDpassword,看看還是不是你要的結果。

2018年6月9日 16:17
編輯回答
傲寒

失誤了,由于連接的wifi設置為隱藏,所以配置少加了一個
config.hiddenSSID=true; 必須加上,才能連接無法掃描到的wifi

 /**
     * 連接wifi
     * @param ssid
     * @param password
     * @param type
     * @return
     */
    public int connectWifi(String ssid, String password, int type) {
        if (removeWifi(getConnectWifiId())) {
            Log.e("disconnectWifi", "true");
        }
        int wifiId = mWifiManager.addNetwork(CreateWifiInfo(ssid, password, type));
        Log.e("wifiId", wifiId + "");
        if (wifiId == -1) {
            Log.e("connectWifi", "false");
            return -1;
        }
        Log.e("connectWifi", "true");

        boolean enabled = mWifiManager.enableNetwork(wifiId, true);
        boolean connected = mWifiManager.reconnect();
        Log.d("connectWifi", "connectWifi:--- "+connected);
        return wifiId;
    }

    /**
     * 創(chuàng)建wifi配置信息
     * @param ssid
     * @param password
     * @param type
     * @return
     */
    public WifiConfiguration CreateWifiInfo(String ssid, String password, int type) {
        WifiConfiguration config = new WifiConfiguration();
        config.allowedAuthAlgorithms.clear();
        config.allowedGroupCiphers.clear();
        config.allowedKeyManagement.clear();
        config.allowedPairwiseCiphers.clear();
        config.allowedProtocols.clear();
        config.SSID = "\"" + ssid + "\"";
        **config.hiddenSSID=true;**

        WifiConfiguration tempConfig = this.IsExsits(ssid);

        if (tempConfig != null) {
            mWifiManager.removeNetwork(tempConfig.networkId);
        }

        if (type == WIFICIPHER_NOPASS) {
            //config.wepKeys[0] = "";
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            //config.wepTxKeyIndex = 0;
        } else if (type == WIFICIPHER_WEP) {
            config.hiddenSSID = true;
            config.wepKeys[0] = "\"" + password + "\"";
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        } else if (type == WIFICIPHER_WPA) {
            config.hiddenSSID = true;
            config.preSharedKey = "\"" + password + "\"";
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            config.status = WifiConfiguration.Status.ENABLED;
        }
        Log.e("config", config.toString());
        return config;
    }
2018年2月23日 04:48