Android13 热点默认5G频道配置修改_android 系统 wifi ap热点功能配置方式

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 */)
(6)WifiServiceImpl.startTetheredHotspot(@Nullable SoftApConfiguration softApConfig)
//方法名再变化
(7)ActiveModeWarden.startSoftAp(apModeConfig);
(8)ActiveModeManager.start();
ActiveModeManager manager = mWifiInjector.makeSoftApManager(listener, callback, softApConfig);
listener.setActiveModeManager(manager);
manager.start();
ActiveModeManager是接口类,会调用到SoftApManager.start()
(9)SoftApManager.startSoftAp()
(10)WifiNative.startSoftAp(mApInterfaceName, localConfigBuilder.build(), mSoftApListener)
(11)HostapdHal.addAccessPoint(ifaceName, config, listener::onFailure)
(12)根据硬件版本调用不同的接口实现:addAccessPoint_X_X

从上面流程看热点开启是不需要参数的,后续SoftApManager里面会获取默认参数,综合观察发现WifiNative 前面强制处理最好。

packages\modules\Wifi\service\java\com\android\server\wifi\SoftApManager.java

热点启动关键流程:

//(1)开启wifi的重要过程
//mCurrentSoftApConfiguration 的信息是构造方法从配置文件中获取的
private int startSoftAp() {
Log.d(getTag(), "startSoftAp: band " + mCurrentSoftApConfiguration.getBand()

  • " iface " + mApInterfaceName + " country " + mCountryCode);
    //(2)这里强制设置 mCurrentSoftApConfiguration 的配置参数
    //强制设置5G,48信道
    boolean isDefault5G_48 = SystemProperties.getBoolean(“persist.sys.mydebug.hotspot_default_5G_48”, true);
    Log.d(TAG, "getApConfiguration isDefault5G_48 = " + isDefault5G_48);
    if (isDefault5G_48) {
    mCurrentSoftApConfiguration = new SoftApConfiguration.Builder(mCurrentSoftApConfiguration)
    .setChannel(48, SoftApConfiguration.BAND_5GHZ).build();
    }

int result = setMacAddress();
if (result != SUCCESS) {
return result;
}
。。。
mWifiDiagnostics.startLogging(mApInterfaceName);
mStartTimestamp = FORMATTER.format(new Date(System.currentTimeMillis()));
//(3)热点开启成功的标志
Log.d(getTag(), "Soft AP is started ");

return SUCCESS;
}

验证ok,打开热点默认是是5G 频段,48信道。

而且不管默认配置方法怎么设置,配置文件参数写什么,最终都都是以上面的信息开启的热点。

(2)在获取配置信息方法强制设置并返回,是否ok?

packages\modules\Wifi\service\java\com\android\server\wifi\WifiApConfigStore.java

public synchronized SoftApConfiguration getApConfiguration() {
if (mPersistentWifiApConfig == null) {
/* Use default configuration. */
Log.d(TAG, “Fallback to use default AP configuration”);
persistConfigAndTriggerBackupManagerProxy(
updatePersistentRandomizedMacAddress(getDefaultApConfiguration()));
}
SoftApConfiguration sanitizedPersistentconfig =
sanitizePersistentApConfig(mPersistentWifiApConfig);

//强制设置5G,44信道
boolean isDefault5G_44 = SystemProperties.getBoolean(“persist.sys.mydebug.hotspot_default_5G_44”, true);
Log.d(TAG, "getApConfiguration isDefault5G_44 = " + isDefault5G_44);
if (isDefault5G_44) {
return new SoftApConfiguration.Builder(mPersistentWifiApConfig)
.setChannel(44, SoftApConfiguration.BAND_5GHZ).build();
}
return mPersistentWifiApConfig;
}

其实这里修改看起来不保险?

因为设置一次参数后,系统保存的 mSoftApConfiguration 已经被修改了数据,

重新get是否可以获取到这里的固定的配置信息?

但是想想又可以哦。不管新的对象还是旧的对象都是调用这个方法。set啥都没用?

实际测试是ok 的,打开热点默认是是5G 频段,44信道。

而且不管默认配置方法怎么设置,配置文件参数写什么,最终都都是以上面的信息开启的热点。

如果上面第一种和第二种方式都修改呢?

这不是脱裤子放屁,搞事情吗?

其实是以第一种方式为准,因为 SoftApManager 的构造方法调用了getApConfiguration方法,

后续才调用 startSoftAp,最终数据以后面设置的算数。

最后来对比一下第一种和第二种强制设置配置信息的区别:

1、第一种是关键流程设置固定信息,比较靠谱
2、第二种是获取参数配置返回固定信息,但是系统可能多个地方都会调用到,会增加不确定性,需要一定的压测
3、第一种方式的修改后用户获取到的热点配置信息是不对的,用户还是获取配置文件的或者getApConfiguration方法的信息
4、第二种方式的修改后用户获取到的热点配置信息是正确的,是和实际配置的信息是一致的,虽然和保存在本地文件的信息不一定一致

所以要增加可靠性,第一种和第二种方式都修改也是没有问题的,

记得固定信息要一直,上面代码只是示范效果。

三、其他

1、Android13 热点默认5G频道配置修改总结

方式1:系统中热点默认配置信息对象 WifiApConfigStore.java,默认配置方法getDefaultApConfiguration() 中设置默认信息即可。

实现思路:

在默认配置方法getDefaultApConfiguration() 中设置默认信息即可。

方式二:把 WifiConfigStoreSoftAp.xml编写默认配置后,编译到运行系统的对应目录。

热点其他默认配置信息也可以参考修改。

2、之前写的热点相关知识汇总

https://so.csdn.net/so/search?q=热点&t=blog&u=wenzhi20102321

3、Android 设置默认热点名称和热点密码、密码长度

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

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

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

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

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

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

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值