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
相关推荐
橙子199110161 小时前
Android 第三方框架 相关
android
赏金术士1 小时前
JetPack Compose 弹窗、菜单、交互组件(五)
android·kotlin·交互·android jetpack·compose
海天鹰2 小时前
高版本安卓老应用下面空白
android
猫的玖月2 小时前
(七)函数
android·数据库·sql
秋92 小时前
java中对操作mysql8.0.46与MySQL9.7.0有什么区别,并举例说明
android·java·adb
小书房3 小时前
Kotlin协程的运行原理
android·开发语言·kotlin·协程
ooseabiscuit3 小时前
Laravel10.x重磅发布:新特性全解析
android·java·开发语言·mysql
svdo1250p3 小时前
“Fatal error: require(): Failed opening required...” 以及如何彻底避免它再次出现
android·ide·android studio