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 & 8.1

每个后台应用:1次/30分钟

Android 9.0 & later

每个前台应用:4次/2分钟

所有后台应用加起来:1次/30分钟

WiFi扫描的实现步骤

注册系统广播接收器,触发扫描动作【WifiManager.startScan()】

系统扫描结束后会发送广播,等待接收广播

收到广播后,获取扫描结果【WifiManager.getScanResults()】

扫描耗时统计

厂商

机型

系统

扫描个数

耗时(ms)

三星

Note 3

5.0

26

4034

三星

Galaxy A7

6.0

21

1111

三星

S6

7.0

39

2302

三星

S7

8.0

5

1411

三星

S8 plus

9.0

50

1467

谷歌

Pixel 2 xl

Q

37

2233

魅族

M5 Note

6.0

18

5576

魅族

M15

7.1.2

61

2480

华为

荣耀 畅玩4X

5.0

1

305

华为

MT7-TL10

6.0

74

2531

华为

Mate8

7.0

4

2232

华为

荣耀V9

8.0

3

1238

华为

畅享7S

9.0

6

605

OPPO

R7s

5.1

3

960

OPPO

R9S plus

6.0

3

2636

OPPO

R11

7.1.1

46

1551

小米

MI PAD 2

5.1

66

4423

小米

RedMi Note4x

6.0

170

5086

VIVO

Y51A

5.0

1

830

VIVO

Y55A

6.0

9

1185

VIVO

X9

7.1

10

2802

VIVO

Y97

8.1

5

2668

VIVO

X21i A

9.0

17

1181

平均值:2211

总结

wifi扫描有两个必须权限:

ACCESS_WIFI_STATE(用于扫描结束后读取wifi信息)

CHANGE_WIFI_STATE(用于扫描WiFi列表)

另外,随着Android系统的升级,对WiFi扫描做了越来越严格的限制。系统对 WifiManager.getScanResults() 和 WifiManager.startScan() 所做的限制不太一样,但若要实现一个完整的WiFi扫描,就需要“扫描+获取”两个步骤,因此综合来看,WiFi扫描的行为变化如下:

6.0开始

需要至少一个定位权限

8.0开始

需要以下权限中至少一个:

ACCESS_FINE_LOCATION

ACCESS_COARSE_LOCATION

CHANGE_WIFI_STATE

9.0开始

需要同时满足以下所有条件:

拥有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限

拥有 CHANGE_WIFI_STATE 权限

打开定位服务

Q开始

在9.0版限制的基础上,对定位的要求升级为:必须拥有精确定位权限(ACCESS_FINE_LOCATION)

注意:以上是官方文档的说明,与实际测试的结果有出入,可能是手机厂商修改rom导致。

实际测试结果

6.0开始,有如下要求:

必须有至少一个定位权限(ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION)

(Nexus7 6.0.1不开定位拿不到)

7.1.1开始,有如下要求:

必须有至少一个定位权限(ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION)

必须有 CHANGE_WIFI_STATE 权限

必须开启定位服务(魅族M15 、oppo A83)

(小米MIX2 8.0,三星N9600 8.1.0下,不开定位服务也能获取到WiFi列表)

Q开始,有如下要求:

必须有精确定位权限(ACCESS_FINE_LOCATION)

android n wifi scan,Android WiFi扫描相关推荐

  1. 测试apk-异常管控WiFi Scan攻击者开发

    1. 目的 基于<软件绿色联盟应用体验标准>中 WiFi scan 资源的定义,对 WiFi scan 后台持续扫描的测试apk.旨在触发手机中异常功耗管控机制. 没有弹出消息通知,但是确 ...

  2. (一百三十五)Android O探索WLAN扫描(WIFI SCAN ALWAYS)

    1.界面信息 小米mix2 WLAN扫描开关位于设置-更多设置-系统安全-位置信息-扫描,截图如下 2.流程梳理 搜索字符串 jiatai@jiatai:~/expand/aosp/aosp/pack ...

  3. android 图片热点区域,Android开发之扫描附近wifi热点并列表显示

    最近项目中用到了wifi模块,今天做一个简单的总结. 参考:http://www.2cto.com/kf/201310/253617.html 1.怎样获取wifi对象并进行操作 要操作WIFI设备, ...

  4. android wifi 扫描频率,Android WIFI扫描时延

    希望大家能够给个评论,支持下新人,感激不尽. 本文第一篇CSDN博客,欢迎大家关注,如有错误,欢迎批评指正. 本人在做WIFI室内定位时发现Android扫描WIFI的时延不小.在此先附上我扫描wif ...

  5. android获取连接wifi名称,android 获取当前连接WIFI名称的有关问题

    android 获取当前连接WIFI名称的问题 我在程序内通过以下方法获取当前连接的WIFI名称(SSID),这个也是网上找别人的,但在我程序内就获取不到呢? 1.在AndroidManifest.x ...

  6. android 十八 蓝牙及Wi-Fi

    视频课:https://edu.csdn.net/course/play/7621 学习内容 Ø 蓝牙的基本概念 Ø Android中蓝牙的应用 能力目标 Ø 了解蓝牙的基本概念 Ø 掌握Androi ...

  7. android wpa2 wifi,让Android WiFi支持中文

    先要 弄清楚以下几点: 一. Android显示的WiFi名字,计算机都是以二进制处理的数据的,所以接受到的这个名字一定是一个二进制数据,它是怎么变成字符串的呢? 在frameworks/base/w ...

  8. 【Android开发】wifi开关与wifi连接(密码连接)

    过放荡不羁的生活,容易得像顺水推舟,但是要结识良朋益友,却难如登天.-- 巴尔扎克 本文demo来自网络,找了好久找到的,后面自己做了些许修改,这里对源码解析,愧于忘记哪里出来了,感谢作者! 接下来就 ...

  9. android 5.0 wifi移植,android  wifi移植

    手动加载驱动 ####16th,Jul 驱动加载 modprobe libertas modprobe libertas_sdio 加载第二行时出错拉 # modprobe libertas_sdio ...

最新文章

  1. 难道说,这就是专业程序员的办公桌?
  2. 23个MySQL常用查询语句
  3. QT设置坐标轴XY轴显示范围方法
  4. QT Creator应用程序开发——01简单按钮显示
  5. linux uniq命令_如何在Linux上使用uniq命令
  6. 【javascript】DOM操作方法(3)——document节点属性
  7. ❤️JavaScript系列6部曲:流程控制(万字长文)❤️
  8. 7-107 汉诺塔的非递归实现 (25 分)
  9. 阿里巴巴为什么选择Apache Flink?
  10. php7 错误处理,PHP7升级-异常错误处理
  11. 什么是去中心化?交易所为什么要去中心化?
  12. DirectX 发展历程
  13. 在Spring IoC中,依赖注入和依赖查找的数据来源区别
  14. 一年读完100本书(5/100)《创新者的窘境》2021-02-25
  15. 2015火车票抢票,放票时间,几点放票
  16. JAVA 中文简体繁体转换
  17. 使用shell脚本删除rabbitMq的exchange
  18. perspective 3D 效果和动画配合
  19. 暑期实训心得及总结_史国旭
  20. 【CF718E】Matvey's Birthday BFS+动态规划

热门文章

  1. 2010英语一长难句
  2. 全球及中国分散式风电项目开发建设及十四五战略布局分析2021-2027年
  3. 透支自己生命的健身房老板们
  4. 华为无线设备配置智能漫游
  5. svn版本管理软件——svn日常管理代码
  6. LRU原理和Redis实现——一个今日头条的面试题(转载)
  7. 建模之多元线性回归分析
  8. 表格中添加input输入框,用于修改表格内容
  9. 华硕灵耀U4100UQ:将匠心设计融入到骨子里的笔记本电脑
  10. 幻读是什么,幻读有什么问题