1、简单说明
2、为啥配置APN及配置效果
如果你用的MOTO或HTC的Android手机,那么在你插入3G SIM卡以后,进入APN设置界面,手机会自动为你提供好多APN选项;这些不是Google提供的,而是这些厂商在定制自己的Android手机时提供的;如果这些厂商没有提供这些的话,那么一条APN信息都不会出现的,如果那样就需要用户自己配置APN了,若配置不当就无法连接3G网络了。
3、成功配置后,Settings 有关APN源码分析
0)此处我的版本为android 2.2
1)
所涉及的源文件 $ANDROID_SRC_PATH/packages/apps/Settings/src/com/android/settings/ApnSettings.java
2)
149行 android.os.SystemProperties.get(xxx_NUMERIC, "")
--1)该语句的作用是读取SIM卡的numeric,模拟器默认是310260
--2)
numeric值,它是由mcc与mnc拼接而成的,其中mcc是国家码,mnc是供应商码,从而numeric对某一个国家的某一个供应商而言是唯一的,例如:中国移动3gnet 460+02,中国联通3gnet 460+01
--3)
任一时刻,只能看到某一SIM卡所对应的供应商的APN设置,双卡双待模式的机型也是如此的
3、apn的属性问题
1)
一个正确的China Unicom 3gnet
<apn carrier="China Unicom"
apn="3gnet"
proxy=""
port=""
user=""
password=""
server=""
mmsc=""
mcc="460"
mnc="01"
mmsproxy=""
mmsport=""
type=""
/>
2)
其中有些属性是必须要设置的,即使是赋空字符串!
eg:
mmsproxy=""
mmsport=""
type=""
如果你没有设置的话,那么数据库中将给字段设为NULL,从而连接就会出错,需要说明的是我的MID开发板是这样的。
3)
至于哪些值必须设,以及如何设置请看android的有关源码
eg:
TelephonyProvider.java中的方法:
private ContentValues getRow(XmlPullParser parser) {
...
String mmsproxy = parser.getAttributeValue(null, "mmsproxy");
if (mmsproxy != null) {
map.put(Telephony.Carriers.MMSPROXY, mmsproxy);
}
String mmsport = parser.getAttributeValue(null, "mmsport");
if (mmsport != null) {
map.put(Telephony.Carriers.MMSPORT, mmsport);
}
map.put(Telephony.Carriers.MMSC, parser.getAttributeValue(null, "mmsc"));
String type = parser.getAttributeValue(null, "type");
if (type != null) {
map.put(Telephony.Carriers.TYPE, type);
}
...
}