权限

在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);

}

3、调用WifiManager.getScanResults()获取扫描结果。如果在扫描结束前调用这个方法,可能得到的是上一次的扫描结果哦。

BroadcastReceiver wifiScanReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context c, Intent intent) {

if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {

boolean success = intent.getBooleanExtra(

WifiManager.EXTRA_RESULTS_UPDATED, false);

Log.d(TAG, "onReceive: ");

if (success) {

scanSuccess(onWifiListener);

} else {

// scan failure handling

scanFailure(onWifiListener);

}

}

}

};

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//监听wifi列表变化(开启一个热点或者关闭一个热点)

mContext.registerReceiver(wifiScanReceiver, intentFilter);

显示到界面——扫描结果返回

private void scanFailure(OnWifiListener onWifiListener) {

// handle failure: new scan did NOT succeed

// consider using old scan results: these are the OLD results!

Log.d(TAG, "scanFailure: ");

resultList = (ArrayList)wifiManager.getScanResults();

onWifiListener.scanFailure(resultList);

// ... potentially use older scan results ...

}

private void scanSuccess(OnWifiListener onWifiListener) {

Log.d(TAG, "scanSuccess: ");

resultList = (ArrayList)wifiManager.getScanResults();

sortByLevel();

onWifiListener.scanSuccess(resultList);

// ... use new scan results ...

for(ScanResult scanResult : resultList){

Log.d(TAG, "scanSuccess: "+scanResult.SSID);

Log.d(TAG, "scanSuccess: "+scanResult);

}

}

/**

* 列表按信号排序

*/

private void sortByLevel(){

for(int i=0 ;i

for(int j=0;j

if(resultList.get(i).level > resultList.get(j).level){

Collections.swap(resultList,i,j);

}

}

}

}

public interface OnWifiListener {

void scanSuccess(ArrayList scanResults);

void scanFailure(ArrayList scanResults);

}

wifi扫描流程图_一次完整的WIFI扫描过程相关推荐

  1. wifi扫描流程图_扫描方法与流程

    本发明涉及一种扫描方法,特别是一种可提升扫描准确率和响应速度的扫描方法. 背景技术: 很多用户喜欢移动扫描头或者扫描枪来扫描,特别是带扫描头或者扫描枪的平板计算机或者手机用户,不同的用户扫描方式会影响 ...

  2. iphone开蓝牙wifi上网慢_桌面运维:WiFi信号强,网速却很慢?这样操作就能搞定!...

    公司无线WiFi信号挺强,但上网速度却很慢?白领日常办公经常会遇到这个问题,真令人苦恼!这究竟是为什么呢?别担心,云烁服务的工程师给你支个招,简单修改下就没问题了. 一.造成WiFi信号干扰的原因 1 ...

  3. direct wifi 投屏_【教程】Microsoft Wi-Fi Direct Virtual关闭方法

    使用Win10电脑的用户应该有不少会发现自己的电脑网络适配器里面多了一个设备叫"Microsoft Wi-Fi Direct Virtual Adapter",这个设备不仅仅存在, ...

  4. 如何隐藏网络计算机,电脑隐藏wifi怎么设置_电脑如何设置隐藏wifi?-192路由网...

    问:如何用电脑设置隐藏wifi信号(名称)? 答:需要用电脑先登录到路由器的管理页面,然后打开 无线设置 或者 Wi-Fi设置 这个功能选项,就可以完成隐藏wifi名称的设置了.如果你是新手,建议按照 ...

  5. 网站漏洞扫描工具_如何实现免费网站漏洞扫描?推荐一款神器给你

    网站漏洞想必有网站的人都比较了解,想要了解网站漏洞,最好的办法就是给网站做一次漏洞扫描,网站漏扫产品比较多,费用也从几十/次到几千/次不等,但是对于我这种小企业来说,几千一次也是非常贵的,因此在我的努 ...

  6. 10.8.8.8柠檬wifi网页登录_基于企业邮箱进行wifi实名认证的方案

    之前我们介绍过如何用钉钉认证和企业微信认证来实现企业内部的实名上网认证.此外邮箱认证也是企业进行wifi实名认证的一个有效手段.因为很多企业都给员工开通了企业邮箱,直接让员工输入邮箱账号和密码进行认证 ...

  7. wifi 中间人攻击_揭秘3·15晚会“Wi-Fi中间人攻击”的操作原理

    在日前的3·15晚会上,现场通过一个自拍游戏活动向大家展示了黑客通过"无密码免费wifi"窃取连接人用户隐私的场景.此后,这一场景成为大家热议的话题.近日,山石网科的安全专家便详细 ...

  8. 米家扫地机器人重置网络_小米扫地机器人重置wifi怎么链接_米家扫地机器人wifi连接不上怎么办...

    小米扫地机器人是扫地机器人中的中高端品牌,很多人已经购买这款小米扫地机器人,但是在使用过程中链接不上wifi是怎么回事呢?一起来看看小米扫地机器人重置wifi方法吧~ 一.小米扫地机器人重置wifi怎 ...

  9. java通过无wifi传数据_没有数据线?使用WiFi实现电脑手机互传文件

    电脑和手机相互传文件是我们常常要做的事情,但都大多依靠数据线来完成.然而,当数据线不在身边或坏了怎么办?这时我们就得想其他的办法了,为此,聪明的网友想到了使用WiFi来实现电脑手机互传文件,而事实上也 ...

最新文章

  1. mysql历史命令_MySQL交互技巧
  2. Problem E: 零起点学算法25——判断是否直角三角形
  3. 更改Tomcat虚拟内存大小
  4. mybatis映射longtext类型数据_全网首例全栈实践(五)Spring Boot 集成Mybatis
  5. jsp - 9 内置对象application详解
  6. golang | 使用结构体抄的学生信息管理系统
  7. python测试代码怎么写_如何使用python做单元测试?
  8. Nodejs简单介绍以及在windows环境下安装与配置流程
  9. linux 中kafka发送数据,C++ 向kafka中发送数据
  10. Mac使用Docker搭建python测试执行环境
  11. git升级后jenkins的报错
  12. Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
  13. MATLAB控制系统视频教程
  14. python批量下载抖音视频_Python一键批量下载抖音无水印视频
  15. Windows最强ssh客户端 Bitvise SSH Client 与阿里堡垒服务
  16. 华为电脑如何投屏到电视linux,华为手机如何投屏到电脑上?手把手教你,无线投屏怎么做...
  17. python如何通过以太网发送指令_Python编写的客户端给服务器发送指令执行相应的命令并返回结果...
  18. c++11 日期和时间工具(std::chrono::duration)(一)
  19. 面试时应该如何进行自我介绍呢
  20. 寒武纪重磅发布首款AI云芯片,陈天石要让端云结合占领10亿智能终端!

热门文章

  1. 密码*** ,continue,等差求和
  2. 数据表的基础操作(五)数据的修改
  3. s3c2410 bootloader 第一部分启动代码分析
  4. OceanBase 首席科学家阳振坤博士入选2022 年度“CCF王选奖”
  5. think-pad 书签
  6. 一篇NDSS的关于SDN缓冲区漏洞的论文
  7. 高中计算机手抄报图片大全集,高中手抄报图片大全
  8. 蹒跚学步——工作日记20070306
  9. java牛顿切线法求解方程组,牛顿迭代法求方程的解
  10. 聪明人管理配电室,都是这样搞定的!