Android APN的设置问题--进一步讨论
16lz
2021-01-23
1、简单说明 上一篇博文 http://myqdroid.blog.51cto.com/2057579/389134已对APN的配置作了较为详细的说明 ,可是我想有些读者对为啥要提前在源码中配置APN及成功配置后有啥效果较为迷惑,同时我想对在创建一个APN时的注意之处作出说明。 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);
} ... }
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);
} ... }
更多相关文章
- 别人花了几万元学的Android架构技术,我帮你们免费弄来了全套视频
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launch
- Android 5.1 Settings模块源码分析
- Android aapt实现资源分区(补充携程aapt源码)
- 基于MAC Android 8.1源码下载编译阅读
- Android屏幕锁定实例源码详解教程一
- 如何编译Android内核源码
- Android ImageView 的scaleType属性
- Android属性 bulid.prop等