权限
在android 8上,一次成功的WifiManager.startScan()调用需要有以下权限中的任意一个,如果一个权限都没有则会报SecurityException的异常。
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
CHANGE_WIFI_STATE
而Android 9开始,一次成功的WifiManager.startScan()调用必须包含以下的所有权限,WifiManager.getScanResults()的调用同样序言这些权限。如果这些权限没有全部包含则会报SecurityException的异常。
ACCESS_FINE_LOCATION 或者ACCESS_COARSE_LOCATION权限
CHANGE_WIFI_STATE权限
位置(设置>位置)权限的获取
扫描频次的限制
Android 8 上每个后台应用可以每隔半小时扫描一次;而Android 9 每个前台应用可以两分钟内扫描四次,允许了短时间快速扫描,每个后台应用可以半小时扫描一次。
扫描步骤
1、注册SCAN_RESULTS_AVAILABLE_ACTION的广播监听,这个监听会在扫描完成的时候返回成功或者失败的状态。
2、调用WifiManager.startScan()开始扫描,要检查一下返回的状态,有可能会失败,比如说短时间内过多次扫描、设备问题、WIFI硬件返回异常等。
boolean success = wifiManager.startScan();
if (!success) {
// scan failure handling
scanFailure(null);