Android WiFi Service启动-Android13

这篇具有很好参考价值的文章主要介绍了Android WiFi Service启动-Android13。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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
Android WiFi Service启动-Android13,Android,WiFI,Android,WiFi

2.2 启动时序图

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

Android WiFi Service启动-Android13,Android,WiFI,Android,WiFi文章来源地址https://www.toymoban.com/news/detail-810261.html

到了这里,关于Android WiFi Service启动-Android13的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android13开发WIFI添加频段设置项(2.4G/5G/automatic)更改笔记】

    提示:这里简述项目相关背景: Android13中客户需求添加WIFI频段选项: 2.4G only,只显示链接2.4G的AP。 5G only,只能显示和链接5G的AP。 Automatic:自动显示,即全部正常显示。 提示:这里描述项目中遇到的问题: 作为初学者的我,刚开始接到这个bug,还是比较懵的,多亏了CSDN的前辈

    2024年02月05日
    浏览(44)
  • Android Wifi开发——Wifi锁(十九)

            有的时候我们需要 APP 在手机后台运行,但是会遇到手机一旦息屏或者断网,APP 无法正常运行的情况,这是因为手机屏幕关闭之后,并且其他的应用程序没有在使用 Wifi 的时候,系统大概在两分钟之后,会关闭 Wifi,使得 Wifi 处于睡眠状态。而 Wifi 锁 就是 Android 锁

    2024年02月07日
    浏览(36)
  • android连接指定wifi

    在Android设备上,我们可以通过代码连接到特定的WiFi网络。这在许多应用中都是非常有用的,例如自动连接到家庭WiFi网络,或者在商家的应用中连接到特定店铺的WiFi网络。 本文将教您如何使用Android代码连接到指定的WiFi网络,并提供示例代码来帮助您实现此功能。 前提条件

    2024年01月16日
    浏览(40)
  • 格行sp790-v13的随身WiFi板子怎么切卡上网同样也是高通410

    把棒子通电上网就不用说了吧  然后打开sp970工具箱进去  以下信息自行辩解  然后在设置连接上WiFi信号  密码自己看壳子  链接以后打开sp970工具箱  IP不一定都是 进入  点击左侧菜单  点设备 进去以后 在更改SIM卡设置 那里点一下就自动换卡了 sp970工具箱为免费的 为避免

    2024年02月07日
    浏览(37)
  • Android adb wifi调试

    0、需要先配置adb的环境变量。打开电脑的环境变量的设置,增加Path的路径,输入sdk下的这个位置(D:androidsdkplatform-tools),如果能在windows上使用adb命令,但是Android Studio中不行,重启as也不行的情况下,那就得重启电脑(cmd 中能用adb,terminal中就不能用,两字:重启电脑)配

    2024年02月06日
    浏览(49)
  • Android 12 WiFi开启流程

     /*                                           ActiveModeWarden  *                                      /                          *                                     /                            *                        ConcreteClientModeManager        

    2024年02月02日
    浏览(37)
  • android通过代码连接wifi

    Android SDK API 29(对应Android 10)以下,可以在app之中通过代码直接设置wifi名称和密码进行连接。 API 29及其以上版本,增加了动态管理权限功能,弃用了之前的接口,同时app连接wifi时必须通过用户同意,具体方式是弹出一个页面显示要连接的wifi,用户点击连接之后再返回app。

    2024年02月20日
    浏览(38)
  • Android WiFi 开启流程(基于Android S)

    本文介绍Android S上WiFi的Enable流程 WifiManager.setWifiEnabled(true) - WifiServiceImpl.enable(pkgName, true) - setWifiEnabledInternal(packageName, enable, callingUid, callingPid, isPrivileged) - mSettingsStore.handleWifiToggled(enable) - Settings.Global.putInt(cr, Settings.Global.WIFI_ON, state) mPersistWifiState = state 记下wifi状态 - mActiveMod

    2024年02月03日
    浏览(33)
  • Android扫码连接WIFI实现

    0,目标         APP中实现扫WIFI分享码自动连接WIFI功能 1,前提条件         设备需要有个扫码器(摄像头拍照识别也行),APP调用扫码器读取WIFI连接分享码。 2,增加权限         在AndroidManifest.xml中增加权限 3,参数检查         扫码成功后,对内容进行一个

    2024年02月09日
    浏览(33)
  • Android11 Wifi开启、扫描和连接

    开启Wifi开关,Wifi开关是 WifiEnabler , WifiEnabler 实现了 SwitchWidgetController.OnSwitchChangeListener 监听,打开/关闭开关会回调至 mWifiManager.setWifiEnabled(isChecked) 用于根据Switch控件的当前状态关闭或打开Wi-Fi。 在 onCheckedChanged 方法的开始部分使用了一个 mStateMachineEvent 变量,当该变量为

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包