先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
正文
Android13 热点默认5G频道配置修改
文章目录
- 2、之前写的热点相关知识汇总
- 3、Android 设置默认热点名称和热点密码、密码长度
- 4、Android11 热点开启流程
- 5、Android11 热点配置信息保存分析
- 6、Android 实现热点开机后自动开启
一、前言
Android开发中经常要设置默认热点,名称,热点密码,是否是5G频段。
之前也有对默认名称和密码进行分析的文章,但是热点频道没怎么看,热点频段对传输性能还是比较重要的,有的平台默认就要5G,查看代码发现默认是2.4G热点。
本文对 Android 默认热点5G频段配置 进行分析。
配置热点信息后,会生成热点配置文件:
wifi信息保存位置:
/data/misc/apexdata/com.android.wifi/WifiConfigStore.xml
热点信息保存位置:
/data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
热点的信息文件包含了:热点名称,热点密码,热点频段和信道值等基本信息;
wifi 的信息文件包含了:连接过的wifi名称,密码,MAC地址等信息。
二、修改默认配置
1、代码中修改默认配置
系统中热点默认配置信息对象 WifiApConfigStore.java
实现思路:
在默认配置方法getDefaultApConfiguration() 中设置默认信息即可。
packages\modules\Wifi\service\java\com\android\server\wifi\WifiApConfigStore.java
import android.os.SystemProperties; //添加prop属性
public class WifiApConfigStore {
private static final String TAG = “WifiApConfigStore”;
//(1)获取默认配置信息方法,该方法在系统无法检测到默认配置文件时会生成
//系统第一次运行时会执行到,还有就是把系统热点配置文件删除后再重启也是会执行到
private SoftApConfiguration getDefaultApConfiguration() {
SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();
//configBuilder.setBand(generateDefaultBand(mContext)); //(2)原来的逻辑。2.4G热点
//(3)加个打印,查看默认的频段值
Log.d(TAG, "getDefaultApConfiguration generateDefaultBand = " + generateDefaultBand(mContext));
//(4)设置默认5G的一段逻辑,添加prop属性进行判断
boolean isDefault5G = SystemProperties.getBoolean(“persist.sys.mydebug.hotspot_default_5G”, true);
Log.d(TAG, "getDefaultApConfiguration isDefault5G = " + isDefault5G);
if (isDefault5G) {
// (5)判断是否支持5G,设置5G band 和 36 信道值。
if (ApConfigUtil.isBandSupported(SoftApConfiguration.BAND_5GHZ, mContext)) {
Log.d(TAG, “getDefaultApConfiguration set band = 5G”);
configBuilder.setChannel(36, SoftApConfiguration.BAND_5GHZ);
} else {
Log.d(TAG, “getDefaultApConfiguration set band = 2G”);
configBuilder.setChannel(3, SoftApConfiguration.BAND_2GHZ);
}
} else { // (6)如果设置prop属性为 false,还是原来的逻辑
configBuilder.setBand(generateDefaultBand(mContext));
}
//(7)默认名称,AndroidAP_四位随机数
configBuilder.setSsid(mContext.getResources().getString(
R.string.wifi_tether_configure_ssid_default) + “_” + getRandomIntForDefaultSsid());
//(8)热点加密形式,默认不支持wpa3,加密类型:WPA2_PSK
if (ApConfigUtil.isWpa3SaeSupported(mContext)) {
configBuilder.setPassphrase(generatePassword(),
SECURITY_TYPE_WPA3_SAE_TRANSITION);
} else {
configBuilder.setPassphrase(generatePassword(),
SECURITY_TYPE_WPA2_PSK);
}
//(9)桥接模式,默认不支持
if (ApConfigUtil.isBridgedModeSupported(mContext)) {
if (SdkLevel.isAtLeastS()) {
int[] dual_bands = new int[] {
SoftApConfiguration.BAND_2GHZ,
SoftApConfiguration.BAND_2GHZ | SoftApConfiguration.BAND_5GHZ};
configBuilder.setBands(dual_bands);
}
}
// Update default MAC randomization setting to NONE when feature doesn’t support it. //(10)MAC地址随机,默认为true,但这里方法没进
if (!ApConfigUtil.isApMacRandomizationSupported(mContext)) {
if (SdkLevel.isAtLeastS()) {
configBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_NONE);
}
}
configBuilder.setUserConfiguration(false);
//(11)根据信息构建 WifiApConfigStore 对象
return configBuilder.build();
}
//(12)获取默认频段,BAND_TYPES:2G,5G,6G
public static @BandType int generateDefaultBand(Context context) {
for (int band : SoftApConfiguration.BAND_TYPES) {
//(13)这里判断首先是否支持2.4G,支持直接返回了,并未进行后续判断。所以默认是2.4G热点!
if (ApConfigUtil.isBandSupported(band, context)) {
return band;
}
}
Log.e(TAG, “Invalid overlay configuration! No any band supported on SoftAp”);
return SoftApConfiguration.BAND_2GHZ;
}
}
上面的 getDefaultApConfiguration() 方法只是系统第一次运行会执行到,并且把获取的默认信息保存到本地配置文件,后续打开过后已经存在信息配置文件就不会再调用获取默认配置的方法了,而是从本地保存的配置文件信息里面获取数据,每次手动保存的数据也是会保存到本地配置文件中的。
更多热点信息可以查看 WifiApConfigStore.java具体代码 。
2、保存默认配置文件设置默认5G频段配置
在系统源码某个mk文件添加文件复制代码:
#set default ap config
PRODUCT_COPY_FILES +=
xxx/WifiConfigStoreSoftAp.xml:data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
在源码xxx路径文件 WifiConfigStoreSoftAp.xml,编译到运行系统的对应目录。
热点配置文件完整信息示例:
console:/ # cat data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> "AndroidAP_5409" 844qwtdw 82:d0:fe:82:e1:d0 console:/ #可以根据自己需求对部分信息进行修改。
编译系统后,直接打开热点就是按照上面的配置信息传给底层的;
应用调用了设置热点配置方法,配置信息也是会保存到 WifiConfigStoreSoftAp.xml 文件的,
后续热点打开都是 WifiConfigStoreSoftAp.xml 的配置信息。
下面的是特殊场景,设置特定热点配置信息,
不管本地配置文件和应用怎么设置,最终热点都是以特定的配置打开。
3、代码中强制设置配置信息
不管应用怎么设置,系统实际生效都是特定的配置,
虽然现实中可能这样的场景比较少,但是万一有呢?
所以还是给大家介绍一下。
(1)在关键流程设置
热点开启和关闭代码:
ConnectivityManager mConnectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
//开启
mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, true,
mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
//关闭
mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
如果需要实现这个就要对Android 热点设置的流程 比较熟悉了,具体在哪个类进行适配可以呢?
热点启动流程
(1)ConnectivityManager.startTethering
(2)TetheringManager.startTethering(request, executor, tetheringCallback)
(3)TetheringService.TetheringConnector.startTethering
(4)Tethering.startTethering(request, listener);
//方法名变化,使用null 对象开启热点
(5)WifiManager.startTetheredHotspot(null /* use existing softap config */)
最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-sAHHP1Jb-1713699504413)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-hXbqmOOO-1713699504413)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!