APN(Access Point Name)是通过手机上网必须配置的一个参数,用来决定手机通过哪种接入方式来访问网络。只要我们的手机插上sim卡之后就可以在手机的设置中查看当前sim卡内置的默认apn参数,一般的安卓智能机都可以在sim卡设置中找到“接入点名称(APN)”并可以查看和新增apn。
下面我们看看apn到底是怎么使用的,在启动Android手机或者启动Android虚拟设备后,所有的APN配置信息都会保存在telephony.db的SQLite数据库表名为carriers的表中。我们可以将此数据库文件pull到本地,然后可以查看carriers表的结构和其中的APN配置信息数据,命令如下:
adb pull /data/data/com.android.providers.telephony/databases/telephony.db D:/telephony.db
我们可以在D盘中找到生成的名称为telephony.db的数据库。
在Android系统中APN配置文件的路径:
1)vendor\qcom\proprietary\qrdplus\Extension\apps\etc\apn-conf.xml
2)framework\base\core\res\xml\apn.xml
字段名称 | 描述 |
name | APN配置名称 |
numeric | 运营商编号 |
apn | APN接入点,如移动的有:cmwap和cmnet |
proxy | 代理服务器地址 |
Port | 端口号 |
mmsproxy | 彩信代理服务器地址 |
mmsport | 彩信代理服务器端口号 |
Mmsc | 彩信接入服务器地址 |
Type | APN接入类型 |
"CREATE TABLE " +CARRIERS_TABLE +
"(_id INTEGER PRIMARY KEY," +"name TEXT," +"numeric TEXT," +
"mcc TEXT,"+ "mnc TEXT," + "apn TEXT," + "user TEXT," +
"serverTEXT," + "password TEXT," + "proxy TEXT," +
"port TEXT," + "mmsproxyTEXT," + "mmsport TEXT," +
"mmscTEXT," + "authtype INTEGER," + "type TEXT," +
"current INTEGER," +"protocol TEXT," + "roaming_protocol TEXT," +
"carrier_enabledBOOLEAN," + "bearer INTEGER," +
"mvno_typeTEXT," + "mvno_match_data TEXT," +
"preferredBOOLEAN DEFAULT 0," + "read_only BOOLEAN DEFAULT 0," +
"ppp_numberTEXT," + "localized_name TEXT," + "v_mccmnc TEXT);"
虽然字段众多但是我们从用途上可以把apn分为发送彩信和上网两种,其中上网的apn又分为wap和net。<apn carrier="" mcc="" mnc="" apn="" user="" password=""
proxy="" port="" type="" authtype="" />
其中carrier、apn、mcc、mnc几个字段是一个完整的apn一定要有的,proxy和port两个字段一般情况下上网的apn都会有这两个字段,而其他的字段都是非必须的。
这里需要强调一下type和authtype,type字段可以有多个属性值,依次用逗号隔开,authtype在自己添加apn时可能给定的值是字符串,我们需要转换为相应的值。具体关系如下:
属性值 | 合入值 |
None | 0 |
不写(默认值) | -1 |
PAP | 1 |
CHAP | 2 |
PAP OR CHAP | 3 |
上网分为wap和net两种方式,使用net手机就会直接连入互联网,而使用wap则会中间多了一个代理网关,移动联通均是10.0.0.172,端口80。而写与联网有关的代码,wap和net是不一样的:
wap一般是这样:
view plainURL url = new URL("http://10.0.0.172:80/index.htm");
HttpURLConnection hc = (HttpURLConnection)url.openConnection();
hc.setRequestProperty("X-Online-Host","www.csdn.net");
net一般是这样:
view plainURL url = newURL("http://www.csdn.net/index.htm");
HttpURLConnection hc =(HttpURLConnection) url.openConnection();
因此,编写程序时就要检测当前的APN类型,判断是wap还是net方式,有时候可能还要修改当前的APN,都是要解决的问题。
主要字段包括:
<apn carrier="" mcc="" mnc="" apn="" user="" password=""
server="" mmsc="" mmsproxy="" mmsport="" type=""
authtype="" />
和上网的字段相同,carrier、apn、mcc、mnc几个字段是一定要有的。除此之外mmsproxy和mmsport两个字段在发彩信的apn中也是必须的。Android中最多支持5种类型的APN,其功能如下所示:
类型 | 描述 |
default | 默认数据连接,即浏览器、Email等普通连接 |
mms | 接收和发送彩信使用的数据连接 |
supl | 支持APGS的数据连接 |
dun | 拨号连接 |
hipri | 扩展 |
1.概念。
一些大公司通常会使用专用APN,其接入点随意定义,只要和该省运营商其他APN不冲突即可。专有APN在功能上可以和Internet的VPN做类比,实际上他就是基于GPRS的VPN网络。
2.常见组网方式。
1)运营商部署一条专线接入到企业的网络中,局端和企业端路由器之间采用私有IP进行连接。
2)局端互连路由器与GGSN采用GRE隧道连接。
3.重要特点。
1)除非运营商分配一个Internet IP地址,否则计算机没有任何办法通过Internet访问该APN中的主机。
2)只有手机卡号在APN中的白名单之列,该手机才可以接入该APN。
3)企业客户可以建立一套RADIUS和DHCP服务器,GGSN向RADIUS服务器提供用户主叫号码,采用主叫号码和用户账号相结合的认证方式;用户通过认证后由DHCP服务器分配企业内部的静态IP地址。补充:该认证方式不一定适合于每个省的运营商,这取决于该省运营商的APN管理平台。