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

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

  • 导入nvram操作用到的库:

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

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

java 复制代码
//mh.add
import vendor.mediatek.hardware.nvram.V1_0.INvram;
import android.os.RemoteException;
//mh.end

private 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-xxxxxxxxxxxx
    config.preSharedKey = "Cbs_123456";/*randomUUID.substring(0, 8) + randomUUID.substring(9, 13);*///mh.modify
    return 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 expected
        result = result.substring(0, DEFAULT_MAC_ADDRESS.length());
    } else if (result.length() < DEFAULT_MAC_ADDRESS.length()) {
        // set to default if length shorted than expected
        result = DEFAULT_MAC_ADDRESS;
    }
    //Log.d(TAG, "result: " + encryptMessage(result));
    return result;
}
//mh.add end
相关推荐
汪海游龙2 小时前
流式回复结尾的那一下闪:逐帧定位 Compose 聊天列表的三处布局跳动
android·性能优化·kotlin
2501_915909064 小时前
Ipa Guard 防护上架,混淆、重签名和回归测试怎么做
android·ios·小程序·https·uni-app·iphone·webview
码点5 小时前
Android ANR 全解析 与 traces 分析实战
android
敲代码的瓦龙6 小时前
Jetpack?lifecycle!!!
android·kotlin
苦瓜花6 小时前
Hilt用使用及原理
android
深度学习04077 小时前
MySQL InnoDB Cluster 部署完整文档
android·mysql·adb
邪修king8 小时前
Re:Linux系统篇(三十七):进程间通信Chapter4:System V 共享内存深度解析:为什么它是最快的 IPC?
android·linux·运维
用户337922545688 小时前
Kiora SDK:在 Android 上组织端侧模型、工具与 A2A 协作
android
洞见前行8 小时前
你在 XML 时代学的渲染优化,进了 Compose 大多不再是重点——Recomposition 才是新的战场
android
ii_best9 小时前
按键精灵手机助手 v5.2.1 实测:inputText 逐字延时 + 调试面板多行复制,安卓脚本开发的两个输入痛点一次解决
android·开发语言·智能手机·自动化·ai编程·按键精灵