2015-08-20 157 views
2

我正在创建一个Android应用程序,该应用程序允许您通过特定的BSSID连接到WiFi。我已经实现了扫描所有wifis的部分,并在WiFi网络安全类型的功能上做出WiFi配置。我还通过特定的BSSID实现了与WiFi网络的连接。如何使用特定的bssid android连接到wifi?

但我有一个问题:与特定BSSID的连接适用于安全网络,但对于开放网络并不起作用,我不知道为什么。事实上,这种与具有特定BSSID的开放网络的连接在三星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(); 

     } 

如果有人可以帮助我,这将是太酷了。我花了很多时间,真的不明白这个问题。

+0

做你解决这个问题?分享你的结论吗? – atx

回答

1

你可以试着找过这段代码,这就是我们用来连接到网络:

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())); 
} 
+0

谢谢,我已经看到了,但这段代码并没有解决我的问题... – Boublond

相关问题