Android APN的配置和加载
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
APN简介
APN指一种网络接入技术是通过手机上网时必须配置的一个参数它决定了手机通过哪种接入方式来访问网络。对于手机用户来说可以访问的外部网络类型有很多例如Internet、WAP网站集团企业内部网络、行业内部专用网络。而不同的接入点所能访问的范围以及接入的方式是不同的网络侧如何知道手机激活以后要访问哪个网络从而分配哪个网络的IP呢这就要靠APN来区分了即APN决定了用户的手机通过哪种接入方式来访问什么样的网络。
APN通常作为用户签约数据存储在HSS归属用户服务器/HLR中用户手机在发起分组业务时也可向网络侧SGSNServing GPRS Support Node服务GPRS支持节点/MMEMobility Management Entity移动管理实体提供APNSGSN/MME以下简称SGSN根据用户所提供的APN通过DNSDomain Name Server域名服务器进行域名解析从而获取到GGSN/PGW以下简称GGSN的IP地址将用户接入到APN对应的PDN中此外HLR中也可存储一个通配符这样用户或SGSN就可以选择接入一个没有在HLR中存储的APN。
APN配置
APN配置文件是/etc/目录的apns-conf.xml配置的参数经过解析后存放到数据库telephony.db的表carriers中表的列字段都定义在Telephony.java文件的子类Carriers中常见字段见附件1[Carriers参数定义]。如果想查看 carriers 的表结构和其中的 APN 配置信息,可以将 telephony.db pull 到本地,通过 SQLiteExpert Professional查看。Telephony.db 在手机的路径为:
/data/data/com.android.providers.telephony/databases/telephony.db。
MTK androidR版本路径为
/data_mirror/data_de/null/0/com.android.providers.telephony/databases/ telephony.db
我们应该根据运营商需求的参数来配置
APN主要参数介绍
carrier----运营商名称没有特殊意义
mcc -----运营商国家码
mnc-----运营商网络码
apn-----APN名称
mmsc----彩信中心地址没有type mms可以不配
mmsproxy----彩信代理
mmsport----彩信端口
type----APN类型有default、mms、supl、xcap、mms、dun等
protocol----非漫游IP协议有IP、IPV6、IPV4V6不配置表示IP即IPV4
roaming_protocol----漫游IP协议有IP、IPV6、IPV4V6不配置表示IP即IPV4
mvno_type----虚拟网络运营商类型有gid、spn、imsi
mvno_match_data----mvno_type对应的value
user_editable----在APN菜单中可编辑
user_visible----在APN菜单中可见
network_type_bitmask----网络类型掩码1~20具体意义见附录2若不配置
表示除了18以外的其他值
APN的加载
APN的加载即APN数据库初始化由TelephonyProvider模块完成。
如果需要修改 apn 配置,可以直接修改 apns-conf.xml 中的文件。 apns-conf.xml 一般在手机的路径为: etc/apns-conf.xml。将修改后的 apns-conf.xml 文件 push 到etc 下,然后将 databases 下的 telephony.db 删掉,重新开机,手机就会重新加载 apn 信息到 carriers。如果我们没有对 telephony.db 进行删除,正常的开关机是不会再重新加载 apns-conf.xml 的。
附录1[Carriers参数定义]
public static final String NAME = "name";
public static final String APN = "apn";
public static final String PROXY = "proxy";
public static final String PORT = "port";
public static final String MMSPROXY = "mmsproxy";
public static final String MMSPORT = "mmsport";
public static final String MMSC = "mmsc";
public static final String MCC = "mcc";
public static final String MNC = "mnc";
public static final String AUTH_TYPE = "authtype";
public static final String TYPE = "type";
public static final String PROTOCOL = "protocol";
public static final String ROAMING_PROTOCOL = "roaming_protocol";
public static final String NETWORK_TYPE_BITMASK = "network_type_bitmask";
public static final String MVNO_TYPE = "mvno_type";
public static final String MVNO_MATCH_DATA = "mvno_match_data";
public static final String USER_VISIBLE = "user_visible";
public static final String USER_EDITABLE = "user_editable";
附录2网络类型