2014-09-04 33 views
1

我正在嘗試開發一個小應用程序,我可以從掃描的網絡列表中掃描並連接到WiFi熱點。但是對於開放和安全的網絡,我已經寫了一個密碼提示,如果網絡是開放的(通過事先知道),我不輸入密碼,並保持文本空白,然後輸入,然後連接。任何人都可以告訴如何以編程方式確定開放和安全的WiFi,這樣我就不會要求開放網絡的密碼,並讓它直接連接。請幫忙。 (我不知道哪一個是開放的,哪一個是未來的安全網絡,所以我們需要從SSID或其他東西中識別開放和安全的網絡)如何區分開放和安全的WiFi網絡,而無需以編程方式連接到它?

+0

可能複製http://stackoverflow.com/questions/6866153/android-determine-security-type-of-wifi-networks-in-range-without-connectingt – dasar 2014-09-04 10:20:08

回答

4

這裏你有能力字段,用於識別網絡類型

WifiManager wifimanger = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    List<ScanResult> networkList = wifimanger.getScanResults(); 
    if (networkList != null) { 
     for (ScanResult network : networkList) { 
      String capabilities = network.capabilities; 
      Log.w(TAG, network.SSID + " capabilities : " + capabilities); 
      if (capabilities.toUpperCase().contains("WEP")) { 
       // WEP Network 
      } else if (capabilities.toUpperCase().contains("WPA") 
         || capabilities.toUpperCase().contains("WPA2")) { 
       // WPA or WPA2 Network 
      } else { 
       // Open Network 
      } 
     } 
    } 
0

今天我正在尋找這個問題的答案,但這裏和其他類似問題的解決方案使我有點不安全。如果未來創建了新的安全模式?

現在我更願意做這樣的事情:

public WifiSecurityMode testAgainstSecurityModes(WifiSecurityMode... securities) { 
    for (WifiSecurityMode security : securities) { 
     if (this.capabilities.toUpperCase().contains(security.getName().toUpperCase())) { 
      return security; 
     } 
    } 
    return WifiSecurityMode.UNKNOWN; 
} 


public enum WifiSecurityMode { 

    WEP("WEP"), WPA("WPA"), WPA2("WPA2"),//.... 
    UNKNOWN ("UNKNOWN"); 

    private String name; 

    WifiSecurityMode (String name){ 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

//to use it: (WifiInfo are just a class I create to encapsulate the values in a ScanResult object) 

public List<WifiInfo> getOpenWifis() { 
    List<WifiInfo> open = new ArrayList<>(); 
    for (WifiInfo w : wifiInfoList) { 
     if (w.testAgainstSecurityModes(WifiSecurityMode.WEP, WifiSecurityMode.WPA, WifiSecurityMode.WPA2).equals(WifiSecurityMode.UNKNOWN)) { 
      open.add(w); 
     } 
    } 
    return open; 
} 

之後,你做你想做未知什麼樣的回報。

如果將來創建新的安全模式,則不需要更改testAgainstSecurityModes方法。

相關問題