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 热点设置的流程 比较熟悉了,具体在哪个类进行适配可以呢?

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

044b4dd41f3df44433d.png)在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-ey52jlLU-1712471359963)]

更多推荐