esim卡识别到后没有APN,需要手动配置(参考)。
查询到卡IMSI开头为46006.
查询命令:service call iphonesubinfo 7
查询发现安卓系统里面没有内置对应的APN。
每家厂商定制的都不一样 路径也各不相同。
find ./ -name apn*.xml
1.命令测试:
adb shell
su
content insert --uri content://telephony/carriers --bind name:s:"123" --bind numeric:s:"46006" --bind type:s:"default,sulp" --bind mcc:i:460 --bind mnc:s:"06" --bind apn:s:"123" --bind user:s:"" --bind password:s:""
中国移动:46000 46002 46004 46007
中国联通:46001 46006 46009
中国电信:46003 46011
命令测试完之后需要恢复出厂设置清除。
2.内置apn
找到对应的apns-conf.xml,从机器pull出来修改验证
adb pull /product/etc/apns-conf.xml
//添加APN
<apn carrier="China Unicom 4G" mcc="460" mnc="06" apn="4gnet" port="80" type="default,supl" />
推到机器验证:
adb root;adb remount
adb push .\apns-conf.xml /product/etc/apns-conf.xml
adb shell "rm data/user_de/0/com.android.providers.telephony/databases/telephony.db"
adb shell sync
adb reboot
Android支持的apn类型(原文链接)
Android中支持的apn类型(”default, mms, supl, dun, hipri, fota, ims…….”),其功能如下所示:
类型 | 描述 |
---|---|
default | 默认数据连接,即浏览器、Email等普通连接(internet、wap、web) |
mms | 接收和发送彩信使用的数据连接 |
supl | 支持APGS的数据连接(gprs上网) |
dun | 拨号连接(wifi等上网类型,tethering) |
hipri | 扩展 |
此表中的数据优先级是由低到高的,即default数据连接的优先级最低,而hipri数据连接的优先级最高。比如在手机上网聊天时,将建立default数据连接;当手机收到一条彩信,因为彩信的数据连接是mms,这时会断开default数据连接而创建mms数据连接,从而能快速接收到此彩信,因为mms比default的数据连接优先级高。因此,在发送和接收彩信的同时不能上网。
APN分类
1、default
默认网络连接,当激活时所有数据传输都使用该连接,不能与其他网络连接同时使用
适用场合:绝大部分正常上网时可以使用
2、mms
彩信专用连接,此连接与default类似,用于与载体的多媒体信息服务器对话的应用程序,此连接能与default连接同时使用
适用场合:使用彩信服务时,必须有mms类型的接入点,不必选中,应用程序会自动使用此接入点
3、supl
是SecureUser Plane Location“安全用户面定位”的简写,此连接与default类似,用于帮助定位设备与载体的安全用户面定位服务器对话的应用程序,此连接能与default连接同时使用
4、dun
Dial UpNetworking拨号网络的简称,此连接与default连接类似,用于执行一个拨号网络网桥,使载体能知道拨号网络流量的应用程序,此连接能与default连接同时使用
适用场合:当我们使用自己的手机给别人做热点时使用,不管是USB 热点,wifi热点或则bluetooth热点。将他与default区别开来的主要目的一般是方面计费,国外很多运营商手机自己上网和做热点计费不同的。目前在国内三大运营商都没有区分,所以也就没有dun这个apn
5、hipri
高优先级网络,与default类似,但路由设置不同。使用较少。
6、ims
当ims发起激活请求时会使用这个apn连建立ims的专用承载.
7、FOTA
手机FOTA升级的时候使用
8.IA
IA的apn专用于LTE attach使用,在手机检测到sim卡后,便会加载这个attach apn. 不过很多运营商并没有严格规定attach apn,所以常常复用default类型的apn。 在attachapn 加载的时候它有一个优先级顺序,如下:
IaApn > PreferredApn > DefaultApn>FirstApn
IaApn : 类型为ia的apn,优先级最高。
PreferredApn :选中的apn。比如在手机setting里面设置的那个apn
DefaultApn :从apnlist里面查询到的第一个类型为“default”的apn
FirstApn :apnlist中的第一个apn。
APN加载和过滤
在每次开机的时候系统回自动检查telephony.db是否存在,如果不存在则会创建数据库telephony.db,并利用apns-conf.xml中的内容生成表carriers,以后所有对apn的操作都会是直接针对表carriers,包括查询,创建,修改,删除等。
当插入一张卡后系统会根据卡的相关信息来匹配相应的apn,在apn list中主要涉及匹配的项有:mcc,mnc,mvno_type, mvno_match_data。mvno_type值决定mvno_match_data的值,android原生代码里mvno_type会有4个值,他们分别是“spn”,“imsi”,“gid”, “iccid”。所以,在apn 读取的时候,会先根据sim卡的mcc,mnc读取出相应的apn list,接着会判断apn list 中的每一个apn的mvno_type 的值,如果不为空,则会根据mvno_type 和mvno_match_data再一次对apn list进行过滤,一般情况下,mvno_type,mvno_match_data为空。