有没有办法在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网络。
答案 0 :(得分:3)
不,这是不可能的。您必须获得当前正在运行的wifi的加密类型的唯一方法是使用android.net.wifi.WifiInfo
或ScanResults
使用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