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
相关推荐
sun00770017 小时前
android ndk编译valgrind
android
AI视觉网奇18 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空19 小时前
android studio gradle 访问不了
android·ide·android studio
No Silver Bullet20 小时前
android组包时会把从maven私服获取的包下载到本地吗
android
catchadmin20 小时前
PHP serialize 序列化完全指南
android·开发语言·php
tangweiguo0305198721 小时前
Kable使用指南:Android BLE开发的现代化解决方案
android·kotlin
00后程序员张1 天前
iOS App 混淆与资源保护:iOS配置文件加密、ipa文件安全、代码与多媒体资源防护全流程指南
android·安全·ios·小程序·uni-app·cocoa·iphone
柳岸风1 天前
Android Studio Meerkat | 2024.3.1 Gradle Tasks不展示
android·ide·android studio
编程乐学1 天前
安卓原创--基于 Android 开发的菜单管理系统
android
whatever who cares1 天前
android中ViewModel 和 onSaveInstanceState 的最佳使用方法
android