Android WiFi Service启动-Android13

Android WiFi Service启动 - Android13

  • 1、SystemServer中入口
  • 2、WifiService启动
    • 2.1 关键类概要
    • 2.2 启动时序图

Android WiFi基础概览
AOSP > 文档 > 心主题 > WiFi概览


1、SystemServer中入口

  1. 编译生成对应的jar包:"/apex/com.android.wifi/javalib/service-wifi.jar"
  2. 相关WiFi服务:WifiServiceWifiScanningServiceRttServiceWifiAwareServiceWifiP2pService

frameworks/base/services/java/com/android/server/SystemServer.java

    private static final String WIFI_APEX_SERVICE_JAR_PATH ="/apex/com.android.wifi/javalib/service-wifi.jar";private static final String WIFI_SERVICE_CLASS ="com.android.server.wifi.WifiService";private static final String WIFI_SCANNING_SERVICE_CLASS ="com.android.server.wifi.scanner.WifiScanningService";private static final String WIFI_RTT_SERVICE_CLASS ="com.android.server.wifi.rtt.RttService";private static final String WIFI_AWARE_SERVICE_CLASS ="com.android.server.wifi.aware.WifiAwareService";private static final String WIFI_P2P_SERVICE_CLASS ="com.android.server.wifi.p2p.WifiP2pService";/*** Starts a miscellaneous grab bag of stuff that has yet to be refactored and organized.*/private void startOtherServices(@NonNull TimingsTraceAndSlog t) {// ... ... ... ...if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {// Wifi Service must be started first for wifi-related services.t.traceBegin("StartWifi");mSystemServiceManager.startServiceFromJar(WIFI_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();t.traceBegin("StartWifiScanning");mSystemServiceManager.startServiceFromJar(WIFI_SCANNING_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)) {t.traceBegin("StartRttService");mSystemServiceManager.startServiceFromJar(WIFI_RTT_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_AWARE)) {t.traceBegin("StartWifiAware");mSystemServiceManager.startServiceFromJar(WIFI_AWARE_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)) {t.traceBegin("StartWifiP2P");mSystemServiceManager.startServiceFromJar(WIFI_P2P_SERVICE_CLASS, WIFI_APEX_SERVICE_JAR_PATH);t.traceEnd();}// ... ... ... ...}

2、WifiService启动

2.1 关键类概要

  1. WifiInjector.java : WiFi依赖性注入器。用于访问各种WiFi类实例,并作为模拟注入的句柄。
  2. WifiConnectivityManager.java : 管理所有与连接相关的扫描活动。当屏幕打开或关闭、WiFi连接或断开连接或按需时,会启动扫描,扫描结果会传递给WifiNetworkSelector,由其建议连接到哪个网络。
  3. ClientModeManagerBroadcastQueue.java : 用于在多个并发客户端接口处于活动状态时缓冲公共广播,以在存在单个客户端接口处于激活状态时保留应用程序预期的遗留行为。
  4. StateMachine.java : 这里定义的状态机是一个分层状态机,它处理消息,并且可以具有分层排列的状态。
    状态是state对象,必须实现processMessage并可选地输入exit getName。进入/退出方法相当于面向对象编程中的构造和销毁,分别用于执行状态的初始化和清理。getName方法返回状态的名称;默认实现返回类名。让getName返回状态实例名称可能是可取的,特别是在特定状态类具有多个实例的情况下。
    创建状态机时,addState用于构建层次结构,setInitialState用于标识其中哪一个是初始状态。构造完成后,程序员调用start来初始化并启动状态机。StateMachine的第一个操作是从其最年长的父级开始,对初始状态的所有层次结构调用enter。要输入的调用将在StateMachine的处理程序的上下文中进行,而不是在要启动的调用的上下文中,并且它们将在处理任何消息之前被调用。例如,给定下面的简单状态机,将调用mP1.enter,然后调用mS1.enter。最后,发送到状态机的消息将由当前状态处理;在我们下面的简单状态机中,它最初是mS1.processMessage
  5. WifiServiceImpl.java : 实际处理实现处理类;WifiService通过实现IWifiManager接口来处理远程WiFi操作请求。
  6. ActiveModeWarden.javaConcreteClientModeManager.java : 不同WiFi操作模式的实现。在客户端模式中管理WiFi,连接到配置的网络,在仅扫描模式下我们不连接到配置网络,但执行扫描。此类的一个实例处于活动状态,用于管理每个客户端接口。(Android 12 引入了 Wi-Fi STA/STA 并发功能,使设备可同时连接到两个 Wi-Fi 网络。)

packages/modules/Wifi/service/java/com/android/server/wifi/ConcreteClientModeManager.java
在这里插入图片描述

2.2 启动时序图

启动过程不在赘述,主要处理类WifiServiceImpl.javapublishBinderService(Context.WIFI_SERVICE, mImpl)),主要WiFi连接处理ActiveModeWarden.javaConcreteClientModeManager.java

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/239581.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】“Hello World!“

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 ​ 2024.1.14 纪念一下自己编写的第一个C程序 #include<iostream>int main() {/*我的第一个C程序*/std::cout << "Hello world!:>" <<std::endl;ret…

蓝桥杯备赛 | 洛谷做题打卡day3

蓝桥杯备赛 | 洛谷做题打卡day3 sort函数真的很厉害&#xff01; 文章目录 蓝桥杯备赛 | 洛谷做题打卡day3sort函数真的很厉害&#xff01;【深基9.例1】选举学生会题目描述输入格式输出格式样例 #1样例输入 #1 样例输出 #1 我的一些话 【深基9.例1】选举学生会 题目描述 学校…

腾讯云主机价格表和优惠活动汇总(2024年更新)

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

Javaweb之SpringBootWeb案例新增部门的详细解析

2.3 删除部门 查询部门的功能我们搞定了&#xff0c;下面我们开始完成删除部门的功能开发。 2.3.1 需求 点击部门列表后面操作栏的 "删除" 按钮&#xff0c;就可以删除该部门信息。 此时&#xff0c;前端只需要给服务端传递一个ID参数就可以了。 我们从接口文档中也…

致远OA getAjaxDataServlet XXE漏洞复现(QVD-2023-30027)

0x01 产品简介 致远互联-OA 是数字化构建企业数字化协同运营中台,面向企业各种业务场景提供一站式大数据分析解决方案的协同办公软件。 0x02 漏洞概述 致远互联-OA getAjaxDataServlet 接口处存在XML实体注入漏洞,未经身份认证的攻击者可以利用此漏洞读取系统内部敏感文件…

EasyExcel简单实例

EasyExcel简单实例 准备工作场景一&#xff1a;读取 Student 表需求1&#xff1a;简单读取需求2&#xff1a;读取到异常信息时不中断需求3&#xff1a;读取所有的sheet工作表需求4&#xff1a;读取指定的sheet工作表需求5&#xff1a;从指定的行开始读取 场景二&#xff1a;写入…

vue3中ref和reactive联系与区别以及如何选择

vue3中ref和reactive区别与联系 区别 1、ref既可定义基本数据类型&#xff0c;也可以定义引用数据类型&#xff0c;reactive只能定义应用数据类型 2、ref在js中取响应值需要使用 .value&#xff0c;而reactive则直接取用既可 3、ref定义的对象通过.value重新分配新对象时依旧…

Web3去中心化存储:重新定义云服务

随着Web3技术的崭露头角&#xff0c;去中心化存储正在成为数字时代云服务的全新范式。传统的云服务依赖于中心化的数据存储架构&#xff0c;而Web3的去中心化存储则为用户带来了更安全、更隐私、更可靠的数据管理方式&#xff0c;重新定义了云服务的未来。 1.摒弃中心化的弊端 …

如何在 openKylin 上安装 ONLYOFFICE 文档?

文章作者&#xff1a;ajun ONLYOFFICE 文档是一款全面的在线办公工具&#xff0c;提供了文本文档、电子表格和演示文稿的查看和编辑功能。它高度兼容微软 Office 格式&#xff0c;包括 .docx、.xlsx 和 .pptx 等文件格式&#xff0c;并支持实时协作编辑&#xff0c;使团队成员能…

边缘计算AI智能分析网关V4算力分析及应用场景

一、硬件介绍 智能分析网关V4是TSINGSEE青犀视频推出的一款高性能、低功耗的软硬一体AI边缘计算硬件设备&#xff0c;硬件采用BM1684芯片&#xff0c;集成高性能8核ARM A53&#xff0c;主频高达2.3GHz。硬件内置近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、…

SQL:一行中存在任一指标就显示出来

当想要统计的两个指标不在一张表中时&#xff0c;需要做关联。但很多情况下&#xff0c;也没有办法保证其中一张表的维度是全的&#xff0c;用left join或right join可能会导致数据丢失。所以借助full join处理。 1&#xff09;如&#xff0c;将下面的数据处理成表格中的效果&…

基于springboot生鲜交易系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项…

Spring Boot 3 + Vue 3实战:实现用户登录功能

文章目录 一、实战概述二、实战步骤​&#xff08;一&#xff09;创建前端项目 - login-vue1、创建Vue项目2、安装axios模块3、安装vue-router模块4、安装less和less-loader模块5、运行Vue项目6、在浏览器里访问首页7、在IDEA里打开Vue项目8、创建登录Vue组件9、创建首页Vue组件…

rime中州韵小狼毫 词组注释 滤镜

教程目录&#xff1a;rime中州韵小狼毫须鼠管安装配置教程 保姆级教程 100增强功能配置教程 在rime中州韵小狼毫 联想词组 滤镜一文中&#xff0c;我们通过Filter滤镜功能配置了联想词组的功能&#xff0c;这使得我们在输入一些关键词汇时&#xff0c;可以联想补充一些附加的词…

HarmonyOS开发FA应用模型下多个页面的声明方式

目录 方式1 方式2 HarmonyOS配套的IDE是DevEco Studio&#xff0c;目前的版本是3.1。官网可以直接下载 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 ​ 方式1 ​在DevEco Studio如果是在pages目录通过右键New->ArkTS File生成的文件&#xff0c;需要注意&…

移动硬盘无法识别处理办法

今天这里做一下总结&#xff0c;我现在手上有一个移动硬盘&#xff0c;插入win10电脑是有盘号的&#xff0c;但是 但是点击就出问题 解决办法 安装DiskGenius 下载网址在https://www.diskgenius.cn/download.php 下载之后解压安装就行&#xff0c;非常简单&#xff0c;然后…

C++力扣题目501--二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

B端产品经理学习-版本规划管理

首先我们回顾一下用户故事&#xff0c;用户故事有如下特点&#xff1a; PRD文档的特点则如下&#xff1a; B端产品中用户角色不同&#xff0c;需求侧重也不同 决策人——公司战略需求&#xff1a;转型升级、降本增效、品牌提升等 管理负责人——公司管理需求&#xff1a;提升…

ROS2】MOMO的鱼香ROS2(六)ROS2入门篇——ROS2通信之参数与动作

ROS2通信之参数与动作 引言1 参数通信1.1 参数常用指令 2 参数之RCLPY实现2.1 创建功能包和节点2.2 编辑脚本文件parameters_basic.py2.3 编译测试 3 动作&#xff08;Action&#xff09;通信3.1 动作常用指令 3.2 自定义通信接口4 动作之RCLPY实现 引言 笔者跟着鱼香ROS的ROS…

全屏页面滚动个人简历模板源码

标题模板介绍 HTML5全屏页面滚动个人简历模板&#xff0c;响应式设计&#xff0c;自适应屏幕分辨率&#xff0c;兼容PC端 和手机移动端&#xff0c;单页面&#xff0c;多栏目&#xff0c;有工作经验、联系我、技能、关于我等栏目。 下载地址 CSDN下载