android7.1 添加预置的APN信息

android7.1 添加预置的APN信息


1. APN
APN,Access Point Name,接入点名称。Android设备里预置了很多APN信息,一般情况无需关心,可以直接匹配。但有可能会遇到无别识别特定或是新的物联网卡。这就需要预置一个对应的APN才能工作(apn一般由运营商提供)。APN(Access Point Name)数据预置在/system/etc/apns-conf.xml中。


对于高通平台,vendor\qcom\proprietary\common\config\device-vendor.mk定义了/system/etc/apns-conf.xml的来源
XML_CONF_PATH := vendor/qcom/proprietary/telephony-apps/etc
PRODUCT_COPY_FILES := $(XML_CONF_PATH)/apns-conf.xml:system/etc/apns-conf.xml $(PRODUCT_COPY_FILES)


2. APN加载过程
2.1 系统检查到SIM卡正常后从/system/etc/apns-conf.xml解析数据,存放到数据telephony.db
/data/user_de/0/com.android.providers.telephony/database目录下有telephony.db和telephony.db-journal
/data/user_de/0/com.android.providers.telephony/databases/telephony.db


telephony.db是telephony provide的数据库
用SQLiteSpy打开telephony.db-journal的时候提示不是数据库文件

 

android7.1 添加预置的APN信息_第1张图片


打开telephony.db部分内容如下,该数据库中有一个carriers数据表,存储了全球各地电信运营商的接入点配置信息

  android7.1 添加预置的APN信息_第2张图片
2.2 telephony.db数据库的建立
对应TelephonyProvider.java文件
(1) 创建数据库
  android7.1 添加预置的APN信息_第3张图片
(2) 获取/system/etc/apns-conf.xml文件
  android7.1 添加预置的APN信息_第4张图片
(3) 把从xml文件得到的APN信息添加到数据库db中。
在private void initDatabase(SQLiteDatabase db)中实现
  android7.1 添加预置的APN信息_第5张图片


因为RIL层在初始化拨号的时候会从sim卡中读取apn,然后把读出的apn和预先数据库中的apn对比,如果匹配就按照数据库的信息去拨号


3. 添加APN信息
vendor/qcom/proprietary/telephony-apps/etc/apns-conf.xml添加需要的apn信息,比如最近公司采购一种移动物联网卡,需要增加下面的apn信息才可以正常使用:
      apn=" cmiot"
      mcc="460"
      mnc="04"
      user=""
      server=""
      password=""
      proxy=""
      port=""
      mmsproxy=""
      mmsport=""
      mmsc=""
      type="default,net,supl"
      preferred="true"
      localized_name="APN_NAME_CMNET"
      protocol="IPV4V6"
      roaming_protocol="IPV4V6"/>
其实这里就是在其他移动apn信息上,增加一项,并把apn="cmnet"改为apn="cmiot".


通过QXDM 工具,查看SIM卡在注册 时的空口(空中接口,基站与终端的交互过程中的信息)信息,SIM卡在注册 的时候,会跟基站进行多次的交互,将SIM卡的信息发给基站。基站收到信息会将消息发回到终端,这些信息就带有apn,mcc ,mnc,这些信息与终端的APN config列表进行匹配,如果匹配上了,那么就能正常注册网络,如果匹配不上,那么就上不了网。遇到类似的问题,首先就要查看APN的配置是否正确。至于 如何查看,这个需要了解卡的mnc mcc。然后再在设置,更多,移动网络设置,APN设置下,添加一个APN。最后再进行验证。


打开db后可通过select * from carriers where apn like 'cmiot';
来查询添加的是否在db中。


增加apn信息的xml测试验证方法:
(1) Push到设备端
adb push apns-conf.xml /system/etc/
rm /data/user_de/0/com.android.providers.telephony/databases/telephony.db
重启即可,此方法,如果是用OTA升级包方式,需要把apns-conf.xml放在OTA包的/system/etc/目录下。删除telephony.db的动作可在updater-script文件中添加:
delete_recursive("/data/user_de/0/com.android.providers.telephony/databases/telephony.db ");来删除


(2) 手动重置APN
设置---》无线和网络---》移动网络---》接入点名称(APN),选择右上角“重置为默认配置”,这样就会重置APN列表。 


参考:
Android N TelephonyProvider及数据库初始化
https://blog.csdn.net/u012724237/article/details/74755357

你可能感兴趣的:(Android操作系统)