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

How to get encryption type of the current wifi connection without scanning all wifi networks?

有没有办法在 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 class 中那样扫描所有 wifi 网络。

不,这是不可能的。获得当前 运行 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
            }
           }
        }
    }

您可以从这里获取参考文献: