2014-09-04 83 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方法。

相关问题