安卓手机APP开发__Wi-Fi扫描概述
安卓手机APP开发__Wi-Fi扫描概述
目录
概述
Wi-Fi的扫描过程
限制
权限
Android 8.0 and Android 8.1:
Android 9:
Android 10 (API 级别 29) 和 更高版本:
扫描频率的限制
Android 8.0 and Android 8.1:
Android 9:
Android 10 and higher:
概述
你能使用Wi-Fi的扫描能力,通过使用Wifi管理器API来得到Wi-Fi的扫描过程.
Wi-Fi的扫描过程
在扫描的过程中有三个步骤:
为SCAN_RESULTS_AVAILABLE_ACTION注册一个广播的监听器,当扫描的请求被完成时
这个监听器被调用了,提供它们成功/失败的状态.对于运行在安卓10(API级别29)以及
更高版本,这个广播被发送到任何Wi-Fi扫描完成的设备上。APP能积极地监听所有的
扫描完成,通过使用广播。
使用WifiManager.startScan()方法请求一个扫描。确保检查方法的返回状态,因
为这个调用可能因为如下的任何一个原因而失败:
因为在短时间内有太多的扫描了,扫描请求被堵塞住了。
设备是空闲的但扫描被禁用了
Wi-Fi报告了一个扫描故障
使用WifiManager.getScanResults()方法得到扫描的结果。返回的扫描的结果是最新的
更新的结果,如果你的扫描没有完成,它可能是之前的一次的结果。这意味着
如果你在接收到一个成功的广播之前,调用了这个方法,你可能得到一个比较旧的结果。
如下的代码提供了一个例子,它是如何实现这些步骤的:
Kotlin
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManagerval wifiScanReceiver = object : BroadcastReceiver() {override fun onReceive(context: Context, intent: Intent) {val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)if (success) {scanSuccess()} else {scanFailure()}}
}val intentFilter = IntentFilter()
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
context.registerReceiver(wifiScanReceiver, intentFilter)val success = wifiManager.startScan()
if (!success) {// scan failure handlingscanFailure()
}....private fun scanSuccess() {val results = wifiManager.scanResults... use new scan results ...
}private fun scanFailure() {// handle failure: new scan did NOT succeed// consider using old scan results: these are the OLD results!val results = wifiManager.scanResults... potentially use older scan results ...
}
限制
安卓8.0 (API 级别 26)引入了对权限的限制的允许的Wi-Fi扫描的频率的限制。
为了提升网络的性能,安全,和电池的寿命,安卓9 (API 级别 28)加强了权限请求
并且进一步地限制了Wi-Fi扫描的频率。
权限
Android 8.0 and Android 8.1:
对WifiManager.getScanResults()方法的成功的调用需要如下的权限:
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
CHANGE_WIFI_STATE
如果调用时没有这三个权限,这个调用是失败的,并且返回了SecurityException.
Android 9:
对WifiManager.startScan()方法的成功的调用需要如下的权限:
你的app 有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限.
你的 app 有 CHANGE_WIFI_STATE 权限.
在设备上的定位服务被启用(设置〉定位)
Android 10 (API 级别 29) 和 更高版本:
对WifiManager.startScan()方法的成功的调用需要如下的权限:
你的app 有 ACCESS_FINE_LOCATION 权限.
你的 app 有 CHANGE_WIFI_STATE 权限.
在设备上的定位服务被启用(设置〉定位)
对WifiManager.getScanResults()方法的成功的调用需要如下的权限:
你的app 有 ACCESS_FINE_LOCATION 权限.
你的 app 有 ACCESS_WIFI_STATE 权限.
在设备上的定位服务被启用(设置〉定位)
如果调用时没有这三个权限需求,这个调用是失败的,并且返回了SecurityException.
扫描频率的限制
在使用WifiManager.startScan()方法应用这个限制
Android 8.0 and Android 8.1:
每个后台的APP在30分钟的周期内能扫描一次。
Android 9:
每一个前台的APP在一个2分钟的周期内可以扫描4次。
所有的后台的APP放在一起,在30分钟的周期内能扫描一次。
Android 10 and higher:
限制与安卓9时是一样的,有了一个新的开发者选项,在本地测试时,可以关闭这个限制
(开发者选项〉网络〉Wi-Fi扫描限制)
相关文章:
安卓手机APP开发__Wi-Fi扫描概述
安卓手机APP开发__Wi-Fi扫描概述 目录 概述 Wi-Fi的扫描过程 限制 权限 Android 8.0 and Android 8.1: Android 9: Android 10 (API 级别 29) 和 更高版本: 扫描频率的限制 Android 8.0 and Android 8.1: Android 9: Android 10 and higher: 概述 你能使用Wi-Fi的…...
深入理解二叉树及其在C语言中的实现
一、引言 二叉树是数据结构中一种非常基础且重要的树形结构,它的每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树在计算机科学中有着广泛的应用,如搜索、排序、存储数据等。本文将详细介绍二叉树的基本概念、特性以及在C语言…...
基于ssm+vue图书管理系统
基于ssmvue图书管理系统 ssm477图书管理系统 相关技术 javassmmysqlvueelementui...
高防ip能防护变异CC攻击吗
高防ip能防护变异CC攻击吗?随着互联网的不断发展,网络安全问题也日益突出,各类网络攻击层出不穷,其中CC攻击(Challenge Collapsar攻击)及其变种——变异CC攻击,更是让众多企业和个人网站头疼不已…...
从多站点到多活,XEOS 对象数据容灾能力再提升
近日, XSKY SDS V6.4 新版本发布,其中 XEOS V6.4 全新升级并完善了统一命名空间功能,更进一步增强和完善了异地容灾方案,配合强一致代理读,可以实现异地多活;同时大幅降低管理复杂度,有效降低容…...
3D开发工具HOOPS在BIM系统中的应用
建筑信息模型是一种革命性的建筑设计、施工和管理方法。它通过创建和利用数字信息来优化建筑项目的设计、施工和运营过程。在这个过程中,3D开发工具HOOPS扮演着至关重要的角色,为BIM系统提供了强大的技术支持和丰富的功能。HOOPS中文网http://techsoft3d…...
适合下班做的副业兼职、1天挣300,7天涨粉2万
最近小红书上有类视频火了! 周周近财:让网络小白少花冤枉钱,赚取第一桶金 利用AI制作的漫画解说历史小说视频。视频以《明朝那些事儿》为蓝本,一上线就疯狂吸粉,多条视频内容都大爆了。 就是这个账号,仅仅…...
JS中getElementById与querySelector区别收录
JS中getElementById与querySelector区别收录 getElementById 和 querySelector 都是 JavaScript 中用于从文档中选取元素的方法,但两者之间存在一些关键区别: 选择器语法: getElementById:这个方法只接受一个参数,即元…...
Android:使用Kotlin搭建MVC架构模式
一、简介Android MVC架构模式 M 层 model ,负责处理数据,例如网络请求、数据变化 V 层 对应的是布局 C 层 Controller, 对应的是Activity,处理业务逻辑,包含V层的事情,还会做其他的事情,导致 ac…...
delete原理
一 原理 new申请动态内存,delete释放内存,将内存的数据块标记为可覆盖,可再次使用。在调用delete时不会将内存块的数据,全部初始化为0。 二 new动态内存,不调用delete的后果? 造成内存泄漏。new申请的动…...
青少年 CTF 练习平台:Misc(一)
前言 当然,我可以更详细地介绍一下青少年CTF练习平台。 青少年CTF练习平台是一个专为青少年设计的网络安全竞赛和训练平台。该平台由思而听(山东)网络科技有限公司与克拉玛依市思而听网络科技有限公司共同建设,自2018年创建以来…...
展锐平台+Android系统开发概要
文章目录 一、缩略语二、系统分区1. UIS7885android13的系统分区 三、系统编译四、开发调试 一、缩略语 BBAT:Baseband Auto Test,基带自带测试CRC:Cyclic Redundancy Check,循环冗余检验SPL:Secondary Program Loade…...
unity开发Hololens 制作滑动框
一定要做到最后一步,才会有效果 1、创建空物体 ,并添加组件 创建空物体 命名ScrollingObjectCollection, 添加组件如下图 下面是各个组件展开的内容 2、在ScrollingObjectCollection 下面创建两个空物体,分别命名Container、Clipping…...
【JavaEE进阶】——Spring Web MVC (响应)
目录 🚩学习Spring MVC 🎈返回静态网页 🎈返回数据ResponseBody 🎈返回html代码片段 🎈返回JSON 🎈设置状态码 🎈设置Header 🚩学习Spring MVC 既然是 Web 框架, 那么当⽤⼾在…...
基于springboot+vue的公司资产网站(全套)
一、系统架构 前端:vue2 | element-ui 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 管理后台-登录 02. 管理后台-首页 03. 管理后台-个人中心-修改密码 04. 管理后台-个人…...
Element-UI10分钟快速入门
Element-UI 是一个基于 Vue.js 的桌面端组件库,它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。以下是一个 Element-UI 的快速入门指南: 1. 安装 Element-UI 首先,确保你已经创建了一个…...
深入解析:如何在遍历List时安全地删除元素
什么是并发修改异常(ConcurrentModificationException) 在深入探讨解决方案之前,我们首先要理解什么是并发修改异常。当我们使用迭代器(Iterator)遍历一个List时,如果在迭代过程中结构被修改(比…...
RT_Thread内核源码分析(一)——CM3内核和上下文切换
目录 一、程序存储分析 1.1 CM3内核寻址空间映射 1.2 程序静态存储和动态执行 二、CM3内核相关知识 2.1 操作模式和特权极别 2.2 环境相关寄存器 2.2.1 通用寄存器组, 2.2.2 状态寄存器组 2.2.3 模式切换环境自动保存 2.2.4 函数调用形参位置 2.3 …...
Android 13 高通设备热点低功耗模式
需求: Android设备开启热点,使Iphone设备连接,自动开启低数据模式 低数据模式: 低数据模式是一种在移动网络或Wi-Fi环境下,通过限制应用程序的数据使用、降低数据传输速率或禁用某些后台操作来减少数据流量消耗的优化模式。 这种模式主要用于节省数据流量费用,特别是…...
律所电子签章有效吗,怎么操作?
电子签章在很多国家和地区是合法有效的,但其有效性、使用条件和操作流程可能依据具体的法律法规而有所不同。在中国,随着《中华人民共和国电子签名法》的实施,电子签章在满足一定条件下是具有法律效力的。电子签章可以提高合同签订的效率&…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
