Android13 应用代码中修改热点默认密码

Android 13 修改热点密码

[TOC]

一、前言

Android 有些情况会有修改热点信息的需求,比如修改热点默认名称、默认密码登信息。

之前也有介绍过通过Java系统具体源码修改热点默认配置:
https://blog.csdn.net/wenzhi20102321/article/details/127737534

但是Android13 或者更新的代码,外销国外的设备都要通过EDLA验证了,集成谷歌那套代码,
无法修改 packages\modules\Wifi 的代码,所以无法修改热点的默认信息?

其实办法肯定还是有的,只要在系统第一次启动时通过WifiMannager接口获取wifi信息,再修改一次热点的信息即可。

如果有需求都可以看看下面的实现代码。修改热点其他默认信息也可以同样参考。

二、修改热点密码代码

1、系统源码中修改热点配置信息

 Android11 之前的代码修改位置:
frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiApConfigStore.java//Android13 或者更新的代码中修改热点配置文件位置:
packages\modules\Wifi\service\java\com\android\server\wifi\WifiApConfigStore.java

热点密码定义的部分代码如下:

   //获取默认热点信息private SoftApConfiguration getDefaultApConfiguration() {SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();configBuilder.setBand(SoftApConfiguration.BAND_2GHZ); //默认2.4G//名称:configBuilder.setSsid(mContext.getResources().getString(R.string.wifi_tether_configure_ssid_default) + "_" + getRandomIntForDefaultSsid());if (ApConfigUtil.isWpa3SaeSupported(mContext)) {configBuilder.setPassphrase(generatePassword(),SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION);} else {configBuilder.setPassphrase(generatePassword(),SoftApConfiguration.SECURITY_TYPE_WPA2_PSK); //默认热点加密都是WPA2_PSK类型}return configBuilder.build();}//获取默认密码信息 private static String generatePassword() {// Characters that will be used for password generation. Some characters commonly known to// be confusing like 0 and O excluded from this list.final String allowed = "23456789abcdefghijkmnpqrstuvwxyz";final int passLength = 15;StringBuilder sb = new StringBuilder(passLength);SecureRandom random = new SecureRandom();for (int i = 0; i < passLength; i++) {sb.append(allowed.charAt(random.nextInt(allowed.length())));}return sb.toString();}

如果密码需要修改固定字符串,修改这里就可以。

2、应用代码中修改热点配置信息

   //设置热点密码public static void setHotspotPassword(Context context, int type, String password) {DebugLog.info("type = " + type + ", password = " + password);WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);SoftApConfiguration config = wifiManager.getSoftApConfiguration(); //获取以前的信息try {SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();configBuilder.setSsid("" + config.getSsid());configBuilder.setPassphrase(password, type);if (config.getChannel() != 0) {configBuilder.setChannel(config.getChannel(), config.getBand());} else {configBuilder.setBand(config.getBand());}SoftApConfiguration finalConfig = configBuilder.build();DebugLog.info("finalConfig = " + finalConfig);wifiManager.setSoftApConfiguration(finalConfig);} catch (Exception e) {DebugLog.error("error = " + e.getMessage());}}

上面就是应用中设置热点信息的代码,需要一些网络权限、还有系统uid签名才能正常调用。
热点的类型没有wifi那么多,只有三种类型:

type数值和对应类型定义
0:无密码,不能设置密码字符串;
1: 普通类型,WPA、WPA2;
2:WPA3,需要设备硬件支持,一般要Android11以上设备。

上面的代码除了可以设置热点密码和类型,如果有需求还可以定义热点名称、热点信道值channel、热点频段band。

三、其他

1、Android13 系统启动后修改热点信息示例

        //设置热点默认密码boolean isNeedSetHotspotPassword = SystemProperties.getBoolean("persist.debug.need_set_hotspot_password", true);if (isNeedSetHotspotPassword) {String hotspotPassword = SystemProperties.get("persist.debug.hotspot_password_defalut", "abcd1234");FunctionUtil.setHotspotPassword(mContext, 1, hotspotPassword);SystemProperties.set("persist.debug.need_set_hotspot_password", "false");}

上面代码设置看一个属性,保证只会设置一次热点信息。
具体实现,已经在上面“应用代码中修改热点配置信息”片段有介绍。
这里的代码仅供参考,很多实际项目会有开机向导应用oobe,也可以使用oobe相关属性做第一次设置。

2、热点配置信息注意点

(1)热点密码类型如果设置成0,密码字符串不能设置非空字符串,否则会报错;

密码字符串长度小于8或者大于63 也会报错。

看如下代码:

package\modules\Wifi\framework\java\android\net\wifi\SoftApConfiguration.java

        public Builder setPassphrase(@Nullable String passphrase, @SecurityType int securityType) {if (securityType == SECURITY_TYPE_OPEN) {if (passphrase != null) {throw new IllegalArgumentException("passphrase should be null when security type is open");}} else {Preconditions.checkStringNotEmpty(passphrase);final CharsetEncoder asciiEncoder = StandardCharsets.US_ASCII.newEncoder();if (!asciiEncoder.canEncode(passphrase)) {throw new IllegalArgumentException("passphrase not ASCII encodable");}if (securityType == SECURITY_TYPE_WPA2_PSK|| securityType == SECURITY_TYPE_WPA3_SAE_TRANSITION) {if (passphrase.length() < PSK_MIN_LEN || passphrase.length() > PSK_MAX_LEN) {throw new IllegalArgumentException("Password size must be at least " + PSK_MIN_LEN+ " and no more than " + PSK_MAX_LEN+ " for WPA2_PSK and WPA3_SAE_TRANSITION Mode");}}}return this;}
(2)热点频段和信道值设置要正确否则会报错

还是上面那个 SoftApConfiguration.java

    public Builder setChannel(int channel, @BandType int band) {if (!isChannelBandPairValid(channel, band)) {throw new IllegalArgumentException("Invalid band type");}mBand = band;mChannel = channel;return this;}//channel和band的简单校验private static boolean isChannelBandPairValid(int channel, @BandType int band) {switch (band) {case BAND_2GHZ: //不能小于1 和大于14if (channel < MIN_CH_2G_BAND || channel >  MAX_CH_2G_BAND) {return false;}break;case BAND_5GHZ://不能小于34 和大于196if (channel < MIN_CH_5G_BAND || channel >  MAX_CH_5G_BAND) {return false;}break;case BAND_6GHZ://不能小于1 和大于253if (channel < MIN_CH_6G_BAND || channel >  MAX_CH_6G_BAND) {return false;}break;default:return false;}return true;}//如果值设置band,就简单很多,1,2,4三个值。实际设置3也不会报错。public Builder setBand(@BandType int band) {if (!isBandValid(band)) {throw new IllegalArgumentException("Invalid band type");}mBand = band;// Since band preference is specified, no specific channel is selected.mChannel = 0;return this;}

上面代码看如果设置错误的频道band和信道channel也是会抛出异常。

如果不确定信道值channel,那么就只设置band就行了,系统framework内部会自动选择一个可用的channel值。

channel值是一定不能为0的,即使获取之前的配置信息是0,设置的时候不能设置0,设置band值就行。

3、Android几个版本热点的修改点

针对Android系统源码,我这里主要开发过Android8、9、11、13、14.
Android8和9 是差不多的,Android13和14是差不多的;
Android10和12没有接触不做评论。
估计啊:Android10和11差不多,12和13差不多。
这里只说一下很简单的两点:

(1)文件目录变化

  Android11 之前的代码修改位置:frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiApConfigStore.java//Android13 或者更新的代码中修改热点配置文件位置:packages\modules\Wifi\service\java\com\android\server\wifi\WifiApConfigStore.java

(2)设置热点信息调用api变化

变化如下:

    //Android9 或者更低版本的代码:WifiConfiguration wifiConfig;WifiManager.setWifiApConfiguration(wifiConfig);//Android11 或者更新版本的代码:SoftApConfiguration softApConfiguration = wifiManager.getSoftApConfiguration();SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();configBuilder.setSsid(mHotspotName);...WifiConfiguration config = configBuilder.build();WifiManager.setSoftApConfiguration(config);

4、Android11 热点配置信息保存分析

https://blog.csdn.net/wenzhi20102321/article/details/128593458

5、Android11 热点Band值为3

https://blog.csdn.net/wenzhi20102321/article/details/128507254

6、Android13分享热点设置安全性为wpa3

https://blog.csdn.net/wenzhi20102321/article/details/134349526

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

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

相关文章

uniapp form表单校验

公司的一个老项目&#xff0c;又要重新上架&#xff0c;uniapp一套代码&#xff0c;打包生成iOS端发布到App Store&#xff0c;安卓端发布到腾讯应用宝、OPPO、小米、华为、vivo&#xff0c;安卓各大应用市场上架要求不一样&#xff0c;可真麻烦啊 光一个表单校验&#xff0c;…

云手机结合自主ADB命令接口 提升海外营销效率

现在&#xff0c;跨境电商直播已经成为在线零售的重要渠道&#xff0c;在大环境下&#xff0c;确保直播应用的稳定性和用户体验至关重要。 云手机支持自主ADB命令接口&#xff0c;为电商直播营销提供了技术支持&#xff0c;使得应用开发、测试、优化和运维更加高效。 什么是A…

【sklearn | 7】:scikit-learn项目实战指南

引言 在数据科学和机器学习领域&#xff0c;Python以其简洁的语法和强大的库支持&#xff0c;成为了许多开发者和研究者的首选语言。而在众多Python机器学习库中&#xff0c;scikit-learn以其易用性、灵活性和强大的算法集合&#xff0c;成为了最受欢迎的库之一。本文将深入探…

【驱动程序】霍尔编码器电机_CubeMX_HAL库

【驱动程序】霍尔编码器电机_CubeMX_HAL库 电机型号&#xff1a;MG310 霍尔编码器电机 驱动模块&#xff1a;L298N 接线 注&#xff1a; L298N 12V接线柱位置可以接50V~5V当跳线帽接入时&#xff0c;5V接线柱为5V输出&#xff0c;可以给驱动板供电当跳线帽拔出时&#xff0…

内部类+图书管理系统

内部类图书管理系统 1. 实例内部类1.1 实例内部类的结构1.2 实例内部类的一些问题1.2.1 如何在main中创建实例内部类对象&#xff1f;1.2.2 内部类成员变量被static修饰问题&#xff1f;1.2.3 内部类和外部类变量重名的调用问题&#xff1f;1.2.4 外部类访问内部类变量的问题 2…

电商人批量下载神器阿里国际高清主图、详情图、sku及视频信息

电商领域&#xff0c;图片是商品静默的推销员。高质量的图片能吸引顾客目光&#xff0c;传达商品信息&#xff0c;提升购买欲望。它影响产品的第一印象&#xff0c;直接关联转化率和销售额。简而言之&#xff0c;优质图片对电商至关重要。 使用图快下载器&#xff0c;小编给大…

彻底解决idea的编解码问题

一、打开idea&#xff0c;找到Setting,点击File Encoding编解码设置&#xff0c;将以下标红的三个部分全部设置为UTF-8.同理如果你的项目使用的是GBK或者其他编码格式&#xff0c;那么也设置为统一。 二、点击Java Compiler设置补齐-encoding utf-8参数 三、如果你的项目使用到…

Tailwind CSS常见用法

1. 布局类 container&#xff1a;创建一个最大宽度的容器&#xff0c;用于页面布局。 flex&#xff1a;使元素成为弹性容器。 grid&#xff1a;使元素成为网格容器。 mx-auto&#xff1a;使元素水平居中&#xff08;通常需要设置宽度&#xff09;。 2. 间距类&#xff08;Mar…

基于PHP+MYSQL开发制作的趣味测试网站源码

基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分&#xff0c; 自己手动在数据库里修改数据&#xff0c;数据库里有就会优先查询数据库的信息&#xff0c; 没设置的话第一次查询缘分都是非常好的 95-99&#xff0c;第二次查就比较差 &#xff0c; 所以如果要…

ARP安全简介

ARP安全简介 地址解析协议ARP&#xff08;Address Resolution Protocol&#xff09;安全是针对ARP攻击的一种保护特性&#xff0c;通过部署ARP安全的相关特性&#xff0c;不仅能够防范针对ARP协议的攻击&#xff0c;还可以防范网段扫描攻击等基于ARP协议的攻击&#xff0c;保证…

Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题&#xff0c;通过各种排除最终定位到了Redis的内存碎片的问题&#xff0c;这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。 Redis的内存碎片原理 先引用Redis官方的原话&#xff1a; 当键被删除时&#xff0c;Redis …

微服务:nacos

Nacos 由Alibaba推出的集成于SpringCloudAlibaba中的一款开源注册中心框架 主要功能: 注册中心 配置管理 nacos的安装和部署 nacos默认访问端口8848 docker pull nacos/nacos-server:1.2.0 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8…

【Oracle】Oracle中的行转列、列转行(unpivot、pivot函数)

目录 相关解释行转列的应用场景&#xff1a;列转行的应用场景&#xff1a;实现方式 Oralce中的行转列&#xff1a;PIVOT函数语法&#xff1a;示例&#xff1a; Oralce中的行转列&#xff1a;UNPIVOT函数语法&#xff1a;示例&#xff1a; 两个函数的优缺点行转列的优点&#xf…

uniapp H5 如何根据接口返回form表单,跳转银联支付界面?

uniapp如何根据form表单&#xff0c;唤醒第三方支付? 文章目录 uniapp如何根据form表单&#xff0c;唤醒第三方支付?效果图实现 效果图 接口返回 form 表单数据 实现 // 例请求成功&#xff0c;返回数据 rechargePay({}).then(res > {// 接收接口返回数据let { result …

JavaScript 获取 url(get)参数

https://andi.cn/page/621584.html

linux 报错:bash: /etc/profile: 行 32: 语法错误:未预期的文件结束符

目录 注意错误不一定错在最后一行 i进入编辑 esc退出编辑 &#xff1a;wq 保存编辑退出 &#xff1a;q&#xff01;不保存退出 if [ $# -eq 3 ] then if [ ! -e "$1" ]; then miss1 $1 elif [ ! -e "$2" -a ! -e "$3" ]; then miss2and3…

【贪心算法】力扣1481.不同整数的最少数目

给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素&#xff0c;请找出移除后数组中不同整数的最少数目。 示例 1&#xff1a; 输入&#xff1a;arr [5,5,4], k 1 输出&#xff1a;1 解释&#xff1a;移除 1 个 4 &#xff0c;数组中只剩下 5 一种整数。…

【BUG】已解决:zipfile.BadZipFile: File is not a zip file

已解决&#xff1a;zipfile.BadZipFile: File is not a zip file 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

嵌入式驱动源代码(13):电子时钟万年历设计

目录 说明 硬件设计 系统软件 说明 本系统的主要功能是:阴历阳历显示,时间显示,闹钟功能,自定义时间,还有显示外界温度。 其次对电路图的电源设计,本系统采用了3节干电池的电池盒供电,并没有使用一些变压器,和全桥整流芯片。5v左右的电池盒也实现了单片机的5v左右…

[word] word表格跨页断开实现教程 #职场发展#媒体

word表格跨页断开实现教程 选中整个word表格 单击鼠标右键&#xff0c;选择“表格属性”选项 切换至“行”标签&#xff0c;找到“允许跨页断行”选项 勾选上“允许跨页断行”&#xff0c;单击“确定”按钮&#xff0c;完成&#xff01; word表格跨页断开实现教程的下载地址&a…