Android 9.0 修改WLAN热点名称为MAC地址后四位

news/2024/10/26 20:00:41/

这个需求主要是读取mac地址,mac地址一般是用写号工具写入到NVRAM,所以需要从NVRAM读取准确的地址。

  • 导入nvram操作用到的库:

frameworks/opt/net/wifi/service/Android.mk

LOCAL_STATIC_JAVA_LIBRARIES := \vendor.mediatek.hardware.nvram-V1.0-java
  • 读取wifi mac地址并设置热点名称和密码:

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiApConfigStore.java

//mh.add
import vendor.mediatek.hardware.nvram.V1_0.INvram;
import android.os.RemoteException;
//mh.endprivate WifiConfiguration getDefaultApConfiguration() {WifiConfiguration config = new WifiConfiguration();config.apBand = WifiConfiguration.AP_BAND_2GHZ;//mh.@{/*config.SSID = mContext.getResources().getString(R.string.wifi_tether_configure_ssid_default) + "_" + getRandomIntForDefaultSsid();*/String mMac = getMacAddress();mMac = mMac.replace(":", "");mMac = mMac.substring(mMac.length() - 4, mMac.length());config.SSID = "CloboticsAP_" + mMac;//mh.@}config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);String randomUUID = UUID.randomUUID().toString();//first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxconfig.preSharedKey = "Cbs_123456";/*randomUUID.substring(0, 8) + randomUUID.substring(9, 13);*///mh.modifyreturn config;
}//mh.add
private static final String DEFAULT_MAC_ADDRESS = "01:02:03:04:05:06";
private static final String MAC_ADDRESS_FILENAME = "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI";
private static final int MAC_ADDRESS_OFFSET = 4;
private static final int MAC_ADDRESS_DIGITS = 6;
//读取mac地址的方法
public String getMacAddress() {String result = DEFAULT_MAC_ADDRESS;StringBuffer nvramBuf = new StringBuffer();try {int i = 0;String buff = null;INvram agent = INvram.getService();if (agent != null) {buff = agent.readFileByName(MAC_ADDRESS_FILENAME, MAC_ADDRESS_OFFSET + MAC_ADDRESS_DIGITS);// Log.i(TAG, "Raw data:" + encryptMessage(buff));if (buff.length() >= 2 * (MAC_ADDRESS_OFFSET + MAC_ADDRESS_DIGITS)) {// Remove the \0 special character.int macLen = buff.length() - 1;for (i = MAC_ADDRESS_OFFSET * 2; i < macLen; i += 2) {if ((i + 2) < macLen) {nvramBuf.append(buff.substring(i, i + 2));nvramBuf.append(":");} else {nvramBuf.append(buff.substring(i));}}result = nvramBuf.toString();} else {Log.e(TAG, "Fail to read mac address");}} else {Log.e(TAG, "Nvram is null");}} catch (RemoteException e) {e.printStackTrace();}if (result.length() > DEFAULT_MAC_ADDRESS.length()) {// remove extra characters if length longer than expectedresult = result.substring(0, DEFAULT_MAC_ADDRESS.length());} else if (result.length() < DEFAULT_MAC_ADDRESS.length()) {// set to default if length shorted than expectedresult = DEFAULT_MAC_ADDRESS;}//Log.d(TAG, "result: " + encryptMessage(result));return result;
}
//mh.add end

http://www.ppmy.cn/news/1542198.html

相关文章

【线下培训】龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座

文章关键词&#xff1a;电子数据取证培训、产学研推进、手机取证、介质取证 2024年10月23日&#xff0c;龙信科技应邀参与了由教育部网络安全与执法虚拟教研室&#xff08;中国刑事警察学院&#xff09;举办的学术讲座。在这次学术交流中&#xff0c;我们公司的技术专家陈杰以…

在服务器启动docker容器卡住、无启动成功信息,docker ps一a状态码137

在服务器启动docker容器卡住、无启动成功信息&#xff0c;docker ps 一a状态码137 docker、ubuntu 20.04、emqx 5.8.0背景 想从移动安卓设备往服务器发点数据&#xff0c;因为服务器有固定IP&#xff0c;想起来之前看过的这个mqtt&#xff0c;感觉比较合适&#xff0c;但是启…

Git_GitLab

Git_GitLab 安装 服务器准备 安装包准备 编写安装脚本 初始化 GitLab 服务 启动 GitLab 服务 浏览器访问 GitLab GitLab 创建远程库 IDEA 集成 GitLab 安装 GitLab 插件 设置 GitLab 插件 安装 服务器准备 准备一个系统为 CentOS7 以上版本的服务器&#xff0c;使…

WORFBENCH:一个创新的评估基准,目的是全面测试大型语言模型在生成复杂工作流 方面的性能。

2024-10-10,由浙江大学和阿里巴巴集团联合创建的WORFBENCH&#xff0c;一个用于评估大型语言模型&#xff08;LLMs&#xff09;生成工作流能力的基准测试。它包含了一系列的测试和评估协议&#xff0c;用于量化和分析LLMs在处理复杂任务时分解问题和规划执行步骤的能力。WORFBE…

django5入门【03】新建一个hello界面

文章目录 1、前提条件⭐2、操作步骤总结3、实际操作示例 1、前提条件⭐ 将上一节创建的 Django 项目导入到 PyCharm 中。 2、操作步骤总结 &#xff08;1&#xff09;在 HelloDjango/HelloDjango 目录下&#xff0c;新建一个 views.py 文件。 &#xff08;2&#xff09;在 H…

数字IC后端实现 | Innovus各个阶段常用命令汇总

应各位读者要求&#xff0c;小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅&#xff0c;这次只更新到powerplan阶段。有了这份Innovus常用命令汇总&#xff0c;学习数字IC后端从此不再迷路&#xff01;如果大家觉得这个专题还不错&#xff0c;想继…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(3)

11、HTTP 协议 11-1、协议的定义 HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础&#xff0c;是一种 client-server 协议&#xff0c;也就是说&#xff0c;请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通…

vue3 树型视图,利用自定义SFC来定义一个TreeItem,然后进行渲染出一个树形。

1、我们在各种项目中都会碰到树形的视图&#xff0c;所以说这个还是很重要的。 2、项目中我们一般会用现成的组件&#xff08;ant-design、element&#xff09;来处理&#xff0c;这里我们使用自定义的方法&#xff0c;提供一个data来处理&#xff0c;比如这样&#xff1a; 最…