基于t972 Android9 AP6256,如何在设置中添加5G热点选项,并使其正常打开

在这里插入图片描述
通过设置的的WiFi热点选项可以知道关键词“2.4GHz”,因此可以其全局搜索,在packages\apps\Settings\res\values\strings.xml文件下找到如下图所示,
在这里插入图片描述
从上面注释可以知道,选项按键选择2.4GHz触发的按键关键词是“wifi_ap_choose_2G”,因此继续搜索,在packages\apps\Settings\res\values\arrays.xml文件下找到如下下图所示,
在这里插入图片描述
那么可以知道,关键词就是“wifi_ap_band_config_full”,应用就是应该根据这个关键词获取数组内的选项标签,然而在packages目录下没有搜索到有用的调用,那么换个方向,继续搜索“wifi_ap_choose_2G”,搜索到在
packages\apps\Settings\src\com\android\settings\wifi\tether\WifiTetherApBandPreferenceController.java
文件下找到,如下图所示,
在这里插入图片描述
根据上图分析,可以知道,只需要调用is5GhzBandSupported方法返回true即可让设置WiFi热点选项增加上5GHz选项,那么分析一下is5GhzBandSupported方法,此方法如下图所示,
在这里插入图片描述
从上面方法可以看出,需要mWifiManager.isDualBandSupported()返回true和countryCode不为空才可以,先分析isDualBandSupported方法,其方法如下图所示,
在这里插入图片描述
从上图可以知道实质调用的是IWifiManager mService; => mService.isDualBandSupported();
在frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiServiceImpl.java文件搜索到isDualBandSupported方法,如下图所示,
在这里插入图片描述
从上图可以知道最终返回的是“config_wifi_dual_band_support”这个关键词的值,搜索改关键词,在frameworks\base\core\res\res\values\config.xml文件中可以配置该关键词的值,如下图所示,
在这里插入图片描述
这里我们设置为true,那么is5GhzBandSupported方法的第一个条件已经满足了,而第二个条件是countryCode国家代号不为空,这个网上随便找即可,我这里强制给它写为”CN”中国代号,如下图所示,
在这里插入图片描述
那么重新编译烧录后,在设置热点选项可以看到5GHz选项了,如下图所示,
在这里插入图片描述

这里又出现一个问题了,使用2.4GHz频段打开热点是没问题的,但是使用5.0GHz频段打开热点一会就自动关闭了,报错日志关键部分如下图所示,
在这里插入图片描述
通过日志可以看出,它是国家代号不允许5GHz频段,也就是说系统是通过国家代号来决定是否可以打开5GHz频段的WiFi热点的。通过“5GHz band is not allowed without country code”这个日志搜索到在
rameworks\opt\net\wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java文件中出现,如下图所示,
在这里插入图片描述
看到以上程序之后,我们是否想到和之前判断是否支持5G的那段程序很像,那么最暴力的解决方法就是将红色框框那段程序给屏蔽掉。
在重新编译烧录固件后,可以发现5G频段WiFi热点可以正常打开了。

这里想一想,通过这两个地方改动,它都与“countryCode”这个国家代号有关,如果暴力改动,那么有很多变量等都没有动态改动的,那么看看“countryCode”这个是在哪来一开始给它初始化设置的,我们可以让它默认为“CN”就好了,搜索“updateApChannelConfig”方法,找到它在
frameworks\opt\net\wifi\service\java\com\android\server\wifi\SoftApManager.java文件下调用,如下图所示,
在这里插入图片描述
那么它里面传的“mCountryCode”参数又在哪里呢?通过搜索找到在本路径下,如下图所示,
在这里插入图片描述
从上图源码可知道,“mCountryCode”参数又是通过SoftApManager方法中的“countryCode”形参赋予的,那么搜索SoftApManager方法,找到在
frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiInjector.java文件中调用,如下图所示,
在这里插入图片描述
通过上图源码可知道,SoftApManager方法中的“countryCode”形参是通过mCountryCode.getCountryCode()这个方法调用获取的,而“mCountryCode”这个实例的类是在本文件,如下图所示,
在这里插入图片描述
那么“WifiCountryCode”这个类通过搜索,在
frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiCountryCode.java文件中,该类的“getCountryCode”方法如下图所示,
在这里插入图片描述
通过上图源码对该方法注释可知,从SIM卡或手机默认设置返回当前报告的国家/地区代码,因此可知道,为什么5GHz频段WiFi热点打不开了,因为没有插SIM卡,所以获取不到国家代号,使用的是默认设置的代号,那么查找“pickCountryCode”方法,在本文件可找到,如下图所示,
在这里插入图片描述
通过上图源码可知,红色框框的就是当上面搜索手机SIM卡没有获取到国家代号,那么就会设置默认的代号“mDefaultCountryCode”了,所以在本文件中,将“mDefaultCountryCode”变量强制修改成“CN”即可,如下图所示,
在这里插入图片描述
此时也就修改完成了,通过编译烧录,也是完美可以打开5GHzWiFi热点了。
第一种暴力修改方法的日志片段如下:
04-25 15:15:13.816 3778 4344 E ApConfigUtil: 5GHz band is not allowed without country code, config.apBand(1), WifiConfiguration.AP_BAND_5GHZ(1), countryCode(null), config.apChannel(0)
而第二种修改的日志显示的“config.apChannel”配置热点通道从第一种“0”变成系统分配的了,如下:
04-25 15:56:34.849 3759 3940 E ApConfigUtil: config.apChannel is 165

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

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

相关文章

✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】

虚拟主机设计 创建 VirtualHost实现构造⽅法和 getter创建交换机删除交换机创建队列删除队列创建绑定删除绑定发布消息 ★路由规则1) 实现 route ⽅法2) 实现 checkRoutingKeyValid3) 实现 checkBindingKeyValid4) 实现 routeTopic5) 匹配规则测试⽤例6) 测试 Router 订阅消息1…

P4_16使用table实现通用的switch分支语句

0 背景 v1.2.1 以及更早版本的P4_16编程语言中,尽管在Control中支持switch分支语句,但是switch中的选择条件是受限的,仅支持 table_name.apply().action_run 作为switch的选择条件。为了解决此限制,将尝试使用P4_16 Tableswitch来…

分布式websocket IM即时通讯聊天开源项目如何启动

前言 自己之前分享了分布式websocket的视频有同学去fork项目了,自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限&…

深入教程:在STM32上实现能源管理系统

引言 能源管理系统(EMS)在提高能源效率、减少能源消耗和支持可持续发展方面起着关键作用。本教程将介绍如何在STM32微控制器上开发一个能源管理系统,这种系统能够监控和控制能源使用,适用于家庭自动化、工业控制系统以及任何需要…

jQuery Moblie 笔记14 开发跨平台移动设备网页

相关内容:jQuery Moblie基础、操作、移动设备仿真器、jQuery Moblie网页实例、jQuery Moblie的UI组件、…… jQuery推出了一套新的函数库jQuery Mobile,目的是希望能够统一当前移动设备的用户界面(UI)。 移动设备开发应用程序目前大致分为两种&#xff…

MLP手写数字识别(3)-使用tf.data.Dataset模块制作模型输入(tensorflow)

1、tensorflow版本查看 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、MNIST数据集下载与预处理 (train_images,train_labels),(test_images,test_labels) tf.keras.datasets.mnist.load_data()…

第IV章-Ⅰ Vue3组件与组件通信

第IV章-Ⅰ Vue3组件与组件通信 Vue组件根组件全局组件局部组件组件模板父子组件 组件间通信子组件获取父组件数据数据传递选项prop传值校验单向数据流 父组件获取子组件数据emit 方法 多级组件通信provide 声明要传递的数据inject 接收数据 总结应用场景单向数据流(…

强大而简洁:初学Python必须掌握的14个单行代码

Python的魅力与单行代码的重要性 Python,作为一种高级编程语言,自诞生以来就以其简洁、易读、易学的特性而广受开发者喜爱。其魅力不仅在于其强大的功能和广泛的应用领域,更在于其能够用简洁的代码实现复杂的功能,这种能力在很大…

Unity对接科大讯飞实时语音转写WebAPI(Windows平台)

科大讯飞官方文档:实时语音转写 API 文档 | 讯飞开放平台文档中心 (xfyun.cn) 参考文章:unity通过WebAPI连接Websocket实现讯飞语音识别与合成。_unity websocket audio-CSDN博客 要实现语音转文字。首先我们需要从麦克风获取到语音数据,这里…

Redisson 分布式锁和同步器

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 redisson 是基于redis的扩展库,使得redis除了应用于缓存以外,还能做队列…

FloodFill-----洪水灌溉算法(DFS例题详解)

目录 一.图像渲染: 代码详解: 二.岛屿数量: 代码详解: 三.岛屿的最大面积: 代码详解: 四.被围绕的区域: 代码详解: 五.太平洋大西洋水流问题: 代码详解&#x…

基于SpringBoot的教务管理系统 - 源码免费(私信领取)

1. 研究目的 本项目旨在设计并实现一个基于Spring Boot的教务管理系统,以提升学校教务管理效率,优化教学资源配置,提高教学质量,满足学生、教师和管理人员的需求。 2. 研究要求 a. 需求分析 通过调研学校教务管理流程和现有系…

嵌入式单片机中必会的50个电路分享

单片机 电源 声音模块 收音机 485

操作系统-进程管理

1.进程的定义 2.进程的组成 3.进程的特点 4.进程控制结构 5.进程状态 6.进程挂起 6.线程优缺点 7.线程进程的比较 8 .为什么要使用线程 9.用户线程 9.内核线程 10.进程上下文切换信息储存在PCB中 11.fork()

83. 删除排序链表中的重复元素

Problem: 83. 删除排序链表中的重复元素 文章目录 思路解题方法复杂度Code 思路 遍历 解题方法 节点数范围[0, 300] 需要判断节点数是否为0 如果为0则直接返回设置当前节点指针cur,初始化curhead当cur.next非空时: 判断cur.val 与 cur.next.val 是否相等…

typescript-字面量

typescript-字面量 在计算机科学中,字面量用于在源代码中表示某个固定值。在JavaScript程序中,字面量不是变量,它是直接给出的固定值。 Null字面量 Null字面量只有一个,记作null Boolean字面量 Boolean的字面量有两个&#x…

JavaEE初阶Day 15:文件IO(1)

目录 Day 15:文件IO(1)IO文件1. 路径2. 文件的分类3. 使用Java针对文件系统进行操作3.1 属性3.2 构造方法3.3 方法 Day 15:文件IO(1) IO I:Input输入 O:Output输出 输入输出规则…

深入解析Spring Boot中的JWT令牌校验:安全身份验证与授权实践

在现代的Web应用程序中,身份验证和授权是至关重要的功能。 JSON Web Token(JWT)是一种用于安全传输信息的开放标准,它通过在用户和服务器之间传递被声明的对象来安全地传输信息。Spring Boot作为一种流行的Java开发框架&#xff…

golang 确保并发安全性

golang并发安全性 在Golang中,并发安全性通常指的是当多个goroutines同时访问同一个数据结构或资源时,能够保证数据的一致性和完整性,避免数据竞争、死锁等问题 并发安全性案例 案例1 创建 count,起1000个goroutines,…

Java中自定义异常指南

在Java编程中,异常处理是一个非常重要的部分,它允许我们在程序运行时捕获和处理错误情况。除了Java标准库提供的异常类外,我们还可以根据实际需要创建自定义的异常类。自定义异常可以帮助我们更好地描述和处理特定的错误情况。下面&#xff0…