获取WiFi列表方法:创建WifiManager,通过manager对象的getScanResults获取搜索到的结果,直接贴代码。
public List<ScanResult> getWifiList() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
List<ScanResult> scanWifiList = wifiManager.getScanResults();
List<ScanResult> wifiList = new ArrayList<>();
if (scanWifiList != null && scanWifiList.size() > 0) {
HashMap<String, Integer> signalStrength = new HashMap<String, Integer>();
for (int i = 0; i < scanWifiList.size(); i++) {
ScanResult scanResult = scanWifiList.get(i);
Log.e(ConstantUtils.TAG, "搜索的wifi-ssid:" + scanResult.SSID);
if (!scanResult.SSID.isEmpty()) {
String key = scanResult.SSID + " " + scanResult.capabilities;
if (!signalStrength.containsKey(key)) {
signalStrength.put(key, i);
wifiList.add(scanResult);
}
}
}
}else {
Log.e(ConstantUtils.TAG, "没有搜索到wifi");
}
return wifiList;
}
搜索的代码就是这些,很简单。但是在6.0以上的手机上可能wifiManager.getScanResults()方法获取的集合大小就为0。
原因就是权限的问题,获取wifi在6.0以上是需要定位权限的。
private void registerPermission(){
//动态获取定位权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[] { Manifest.permission.ACCESS_COARSE_LOCATION },
100);
} else {
getWifiList();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100) {
getWifiList();
}
}
但是,但是,在小米手机上可能还是不行,获取到的wifi列表大小还是为0。原因在于
小米手机的启用MIUI优化这个设置。
如果你关闭了这个设置可能就会获取不到wifi列表。开启这个设置再重启手机后就行了。