Как подключиться к Wi-Fi с определенным bssid android?

Я создаю приложение для Android, которое позволяет подключить вас к Wi-Fi с определенным BSSID. Я реализовал часть, которая сканирует все Wi-Fi и выполняет настройку WiFi в зависимости от типа безопасности сети WiFi. Я также реализовал подключение к сети WiFi с определенным BSSID.

Но у меня есть проблема: подключение к определенному BSSID хорошо работает для защищенных сетей, но не работает для открытых сетей, и я не знаю, почему. Действительно, это подключение к открытой сети с определенным BSSID работает на Samsung Galaxy S4 или более поздних версиях, но не работает на Galaxy S2 и S3 ... Это действительно странно. На S2 и S3 BSSID не учитывается при подключении.

Это пример кода, который я использую для создания конфигурации открытой сети и попытки подключения к ней с определенными BSSID:

    WifiConfiguration conf = new WifiConfiguration();
    conf.SSID = "\"" + wifiItem.getSSID() + "\"";
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    WifiManager wifiManager = (WifiManager) parentActivity.getSystemService(Context.WIFI_SERVICE);

    wifiManager.addNetwork(conf);
    conf.BSSID = wifiItem.getBSSID();
    wifiManager.updateNetwork(conf);
    wifiManager.saveConfiguration();

    for (WifiConfiguration wifiConfiguration : wifiManager.getConfiguredNetworks()) {

        if (wifiConfiguration.SSID.equals("\"" + wifiItem.getSSID() + "\"")) {

            wifiManager.disconnect();
            wifiConfiguration.BSSID = wifiItem.getBSSID();
            wifiManager.updateNetwork(wifiConfiguration);
            wifiManager.enableNetwork(wifiConfiguration.networkId, true);
            wifiManager.reconnect();

        }

Если бы кто-то мог мне помочь, это было бы так здорово. Я потратил много времени на это и действительно не понимаю эту проблему.


person Boublond    schedule 20.08.2015    source источник
comment
ты решил эту проблему? поделитесь своим выводом?   -  person atx    schedule 22.06.2016
comment
Это приложение доступно?   -  person Jeremy    schedule 26.01.2019


Ответы (2)


Вы можете попробовать просмотреть этот код, это то, что мы используем для подключения к сетям:

    private void connectToNetwork(String password, ScanResult result, String capabilities) {
    WifiConfiguration wc = new WifiConfiguration();
    wc.SSID = "\"" + result.SSID + "\"";

    wc.hiddenSSID = true;
    wc.status = WifiConfiguration.Status.ENABLED;

    if (capabilities.contains("WPA2")) {
        wc.preSharedKey = "\"" + password + "\"";
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
        wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
    }

    if (capabilities.contains("WPA")) {
        wc.preSharedKey = "\"" + password + "\"";
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
    }

    if (capabilities.contains("WEP")) {
        wc.wepKeys[0] = password;
        wc.wepTxKeyIndex = 0;
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
    }

    if (capabilities.contains("TKIP")) {
        wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
    }

    if (capabilities.contains("CCMP")) {
        wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wc.allowedKeyManagement.set(WifiConfiguration.PairwiseCipher.CCMP);
    }

    if (!hasWifiSecurity(capabilities)) {
        wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.NONE);
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    }

    // wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X);

    // // wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
    // wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);

    int res = wifi.addNetwork(wc);
    Log.d("WifiPreference", "add Network returned " + res);
    boolean b = wifi.enableNetwork(res, true);
    Log.d("WifiPreference", "enableNetwork returned " + b);
    Log.d("", "Reassociate: " + wifi.reassociate());
    Log.d("", "ReConnect:   " + wifi.reconnect());
    wifi.saveConfiguration();

    WifiInfo connection = wifi.getConnectionInfo();
    if (connection != null) {
        if (connection.getSupplicantState().equals(SupplicantState.INACTIVE)) {
            wifi.removeNetwork(res);
            wifi.saveConfiguration();
            scanForWiFiNetworks();

            wifi.enableNetwork(wifi.getConnectionInfo().getNetworkId(), true);

        }
    }
    // scanForWiFiNetworks();

    // if (password.equalsIgnoreCase("")) {
    // setScanningEnabled(true);
    // }
    // Toast.makeText(con, "Connecting to network: " + connectionInfo, Toast.LENGTH_SHORT).show(getMessageComments(dialog.getTextID()));
}
person Kristy Welsh    schedule 20.08.2015

Нам нужно подключиться к сети 5G с тем же SSID, что и в сети 2.4G, поэтому единственный способ — установить BSSID. я только что успешно подключился к нескольким указанным сетям BSSID с помощью приведенного ниже кода, попробуйте:

WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = "\"" + SSID + "\"";
config.BSSID = BSSID; // <--BSSID should be set without ->"<-  (-__-)b...

// remove this network from the configed(saved) network list
List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs)
{
    if (null != existingConfig && existingConfig.SSID.toString().equals("\"" + SSID + "\""))
    {
        mWifiManager.removeNetwork(existingConfig.networkId);
    }
}
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

//...
//...

// get the networkid 
int wcgID = mWifiManager.addNetwork(config);

// enabled this network
boolean b =  mWifiManager.enableNetwork(wcgID, true);
person EOS7    schedule 15.05.2018