问题描述:
之前遇到需求是根据设备的mac来修改Android设备的默认热点名称、默认密码,且用户恢复出厂设置后还是修改后的。
解决方案:
通过在csdn上面搜索后,发现两种方法
1.参考https://blog.youkuaiyun.com/weixin_39821531/article/details/81252145修改默认的 value,如下:
但是不难发现这里并不能满足需求
2.参考https://blog.youkuaiyun.com/tony_anmoo/article/details/18708879,修改相应文件
frameworks/base/wifi/java/android/net/wifi/WifiApConfigStore.java中的setDefaultApConfiguration()方法,代码如下:
/* Generate a default WPA2 based configuration with a random password.
We are changing the Wifi Ap configuration storage from secure settings to a
flat file accessible only by the system. A WPA2 based default configuration
will keep the device secure after the update */
private void setDefaultApConfiguration() {
WifiConfiguration config = new WifiConfiguration();
config.SSID = mContext.getString(R.string.wifi_tether_configure_ssid_default);
config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
String randomUUID = UUID.randomUUID().toString();
//first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9,13);
config.channel = 6;
sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG, config);
}
修改后为
/* Generate a default WPA2 based configuration with a random password.
We are changing the Wifi Ap configuration storage from secure settings to a
flat file accessible only by the system. A WPA2 based default configuration
will keep the device secure after the update */
private void setDefaultApConfiguration() {
WifiConfiguration config = new WifiConfiguration();
String mac_id = SystemProperties.get("persist.sys.hwconfig.mac","00:00:00:00:00:00");
String new_mac = mac_id.replaceAll(":","");
String sec_mac = new_mac.substring(6);
String hot_ap = "HBSX-"+sec_mac;
//config.SSID = mContext.getString(R.string.wifi_tether_configure_ssid_default);
config.SSID = hot_ap;
config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
String randomUUID = UUID.randomUUID().toString();
//first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
//config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9,13);
config.preSharedKey = "00000000";
config.channel = 6;
sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG, config);
}
修改之后验证发现完全符合要求。