Wifi扫描
权限方面
必须权限如下:
ACCESS_WIFI_STATE(用于扫描结束后读取wifi信息)
CHANGE_WIFI_STATE(用于扫描WiFi列表)
除必须权限外,根据系统版本,还有不同的限制。具体如下
Android 8.0 & 8.1
WifiManager.getScanResults() 方法的调用必须具备以下任一权限:
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
CHANGE_WIFI_STATE
事实上,从6.0开始,WifiManager.getScanResults() 方法就需要定位权限了。见[硬件标识符访问权]
否则会抛异常SecurityException。
Android 9.0
WifiManager.startScan() 方法的调用必须满足以下所有条件:
拥有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限
拥有 CHANGE_WIFI_STATE 权限
打开定位服务
否则会抛异常SecurityException。
Android Q & later
在9.0版限制的基础上,对定位的要求升级为:必须拥有精确定位权限(ACCESS_FINE_LOCATION)
频率方面
Android对WifiManager.startScan()的调用频率进行了限制。对于超过此频率的接口访问,WifiManager 不会执行完整扫描,而是提供上次扫描所缓存的结果。
Android 8.0 &