Android 默认AP名字,以及AP名字存储路径
2016-06-23 19:33
190 查看
最近在修改Settings.apk,其中有一条需求是修改默认的ap名字。于是我们跟踪一下源码来解决一下困扰我的问题。
首先在Settings\src\com\android\settings\TetherSettings.java的代码中
WifiManager的getWifiApConfiguration可以获取ap相关信息。进入getWifiApConfiguration查看可以得知该类是调用WifiService,WifiService是调用WifiServiceImpl的getWifiApConfiguration。
在WifiStateMachine.java中
其中针对mWifiApConfigChannel的定义如下:
其中WifiApConfigStore wifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
mContext, getHandler());就是我们最后所有问题的答案。在WifiApConfigStore.java这个类中:
这个文件就是存放修改ap名字的文件。而:
也就是获取默认ap名字和密码的代码。
首先在Settings\src\com\android\settings\TetherSettings.java的代码中
private void initWifiTethering() { final Activity activity = getActivity(); mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); mWifiConfig = mWifiManager.getWifiApConfiguration(); mSecurityType = getResources().getStringArray(R.array.wifi_ap_security); mCreateNetwork = findPreference(WIFI_AP_SSID_AND_SECURITY); if (mWifiConfig == null) { final String s = activity.getString( com.android.internal.R.string.wifi_tether_configure_ssid_default); mCreateNetwork.setSummary(String.format(activity.getString(CONFIG_SUBTEXT), s, mSecurityType[WifiApDialog.OPEN_INDEX])); } else { int index = WifiApDialog.getSecurityTypeIndex(mWifiConfig); mCreateNetwork.setSummary(String.format(activity.getString(CONFIG_SUBTEXT), mWifiConfig.SSID, mSecurityType[index])); } }
WifiManager的getWifiApConfiguration可以获取ap相关信息。进入getWifiApConfiguration查看可以得知该类是调用WifiService,WifiService是调用WifiServiceImpl的getWifiApConfiguration。
/** * see {@link WifiManager#getWifiApConfiguration()} * @return soft access point configuration */ public WifiConfiguration getWifiApConfiguration() { enforceAccessPermission(); return mWifiStateMachine.syncGetWifiApConfiguration(); }
在WifiStateMachine.java中
public WifiConfiguration syncGetWifiApConfiguration() { Message resultMsg = mWifiApConfigChannel.sendMessageSynchronously(CMD_REQUEST_AP_CONFIG); WifiConfiguration ret = (WifiConfiguration) resultMsg.obj; resultMsg.recycle(); return ret; }
其中针对mWifiApConfigChannel的定义如下:
class InitialState extends State { @Override public void enter() { mWifiNative.unloadDriver(); if (mWifiP2pChannel == null) { mWifiP2pChannel = new AsyncChannel(); mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pServiceImpl.getP2pStateMachineMessenger()); } if (mWifiApConfigChannel == null) { mWifiApConfigChannel = new AsyncChannel(); WifiApConfigStore wifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore( mContext, getHandler()); wifiApConfigStore.loadApConfiguration(); mWifiApConfigChannel.connectSync(mContext, getHandler(), wifiApConfigStore.getMessenger()); } }
其中WifiApConfigStore wifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
mContext, getHandler());就是我们最后所有问题的答案。在WifiApConfigStore.java这个类中:
class WifiApConfigStore extends StateMachine { private Context mContext; private static final String TAG = "WifiApConfigStore"; private static final String AP_CONFIG_FILE = Environment.getDataDirectory() + "/misc/wifi/softap.conf";
这个文件就是存放修改ap名字的文件。而:
/* 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); sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG, config); }
也就是获取默认ap名字和密码的代码。
相关文章推荐
- Android进阶之自定义注解
- 在Android Studio下执行高德搜索你“1008 ”?
- 关于Android studio 获取versionCode的问题
- Android的SQLite使用介绍
- Android 富文本编辑器 图文混排
- Android 中 native与Html中Js 交互
- 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
- 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
- Android Studio如何设置代码自动提示
- Android从网页的源码中特定标签中取值
- 百度鹰眼Android SDK 运行配置
- Scroll 滚动 《Android 群英传》笔记
- Android自助餐之RxJava手册
- 给 Android 开发者的 RxJava 详解
- Android6.0运行时权限的便捷解决方案
- Android数据库Realm的第一次
- Android Settings修改小记
- Android 的MVC
- 自定义圆形统计图(静态)
- Android Studio不提交so文件的解决方法