全局搜索高通的8909平台源码,发现是在下面的地方发现wifi热点相关的菜单(进到设置里面去看,通过子串查找对应的代码,这个在Android项目修改的时候经常用到的方法。通过某个界面上的子串,找到这个界面后面的逻辑代码):
再搜索字串ID引用,发现如下:
这个mWifiConfig是初始化WifiApDialog类的时候调用的。
继续追踪:
都是调用这个来获取wifi热点的设置。
发现是在WifiServiceImpl extends IWifiManager.Stub中:
WifiStateMachine.java
上面的wifi相关的内容涉及到了状态机,这里就不讨论了。继续查看wifiApConfigStore.loadApConfiguration函数。
原来是从一个文件里面读取的值啊!
在项目里面全局搜一下这个文件试试。
后来还是在WifiApConfigStore的setDefaultApConfiguration函数里面看到了相关的内容:
发现在项目手机上面输入*#06#,弹出的是MEID而非(IMEI),所以看看MEID是怎么获取的。在About phone界面就有MEID的显示。
看看Status.java里面的注释:
所以IMEI对应GSM手机,MEID针对CDMA手机。
综上,如果要设置默认wifi热点名称为指定名称,只需要修改WifiApConfigStore的setDefaultApConfiguration函数即可。如下:
又因为引用了另外一个包里面的java类,所以需要在Android.mk里面进行声明,否则编译的时候会提示找不到该类:
修改代码,删除out目录,update-api,重新编译之后在开机界面卡死。通过adb抓取log发现:
原来是开机的时候根本没法获取到IMEI的后四位。当然如果不用IMEI号,使用其他字串代替也是可以的。修改setDefaultApConfiguration函数如下:
注意,我已经注释了会引起异常的获取IMEI代码。编译之后,将system.img刷到手机,开机发现WIFI热点变为:AMAZON_ECFE。如果手动修改该名称,重启之后,WIFI热点依然是你修改的名称。
本文基于Android 5.1介绍了两点知识:
1. 如何获取IMEI,其中包含如何在另外一个包中引用其他包的类。
2. 如何设置手机的WIFI热点的默认名称。