如何在不扫描所有wifi网络的情况下获取当前wifi连接的加密类型?

时间:2016-10-14 21:54:24

标签: java android android-wifi android-permissions android-networking

有没有办法在Android 6.0+上以编程方式获取wifi加密类型(如WSA,WSA2,WEP)而不使用:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<ScanResult> networkList = wifi.getScanResults();

因为我不想要求用户访问位置。

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

这似乎是扫描wifi网络时的要求。

我希望有一种方法可以获得这个,而无需像在android.net.wifi.WifiInfo类中那样扫描所有的wifi网络。

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。您必须获得当前正在运行的wifi的加密类型的唯一方法是使用android.net.wifi.WifiInfoScanResults使用iterations

您可以使用以下示例获取当前运行Wifi的加密类型ScanResult

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<ScanResult> networkList = wifi.getScanResults();

//get current connected SSID for comparison to ScanResult
WifiInfo wi = wifi.getConnectionInfo();
String currentSSID = wi.getSSID();

    if (networkList != null) {
        for (ScanResult network : networkList)
        {
           //check if current connected SSID
           if (currentSSID.equals(network.SSID)){
            //get capabilities of current connection
            String Capabilities =  network.capabilities;        
            Log.d (TAG, network.SSID + " capabilities : " + Capabilities);

            if (Capabilities.contains("WPA2")) {
               //do something
            }
            else if (Capabilities.contains("WPA")) {
               //do something
            }
            else if (Capabilities.contains("WEP")) {
               //do something
            }
           }
        }
    }

您可以从此处获得参考:https://stackoverflow.com/a/28906046/4360419