当前位置: 首页 > news >正文

安卓手机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环境下,通过限制应用程序的数据使用、降低数据传输速率或禁用某些后台操作来减少数据流量消耗的优化模式。 这种模式主要用于节省数据流量费用,特别是…...

律所电子签章有效吗,怎么操作?

电子签章在很多国家和地区是合法有效的,但其有效性、使用条件和操作流程可能依据具体的法律法规而有所不同。在中国,随着《中华人民共和国电子签名法》的实施,电子签章在满足一定条件下是具有法律效力的。电子签章可以提高合同签订的效率&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...

使用 uv 工具快速部署并管理 vLLM 推理环境

uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

个人电脑部署本地大模型+UI

在这个AI飞速进步的时代,越来越多的大模型出现在市面上 本地大模型也越来越火爆! 它完全免费,随时可以访问,数据仅存在本地,还可以自己微调,训练! 今天我来教大家,如何在一台普通…...

【版本控制】Git 和 GitHub 入门教程

目录 0 引言1 Git与GitHub的诞生1.1 Git:Linus的“两周奇迹”,拯救Linux内核1.2 GitHub:为Git插上协作的翅膀1.3 协同进化:从工具到生态的质变1.4 关键历程时间轴(2005–2008) 2 Git与GitHub入门指南2.1 Gi…...