Android如何确定使用哪个apn

本文探讨了Android设备在确定数据网络APN时遇到的问题,分析了并非依赖COPS上报的mcc mnc,而是通过IMSI信息来选择。作者通过代码分析指出,Android在开机后基于SIM卡的IMSI生成备选APN列表,并在SIMRecords的onAllRecordsLoaded事件中触发。结论是,APN的选择依据是IMSI的前五位,而非COPS的报告。
摘要由CSDN通过智能技术生成

Android如何确定使用哪个apn

一.  问题

研究这个事情是因为遇到下面这样一个问题,我们平板出到巴西、巴拉圭,客户测试发现用当地有个叫OI的运营商的SIM卡,无法上网,要Log过来看下,发现一个非常奇怪的现象:注上的电话网络跟数据网络mcc mnc居然不一样。电话网络是 72416, 数据网络是72431。

二.  分析

一直以为,Android拨数据网络的时候,是根据COPS注上当前网络的mcc, mnc来选择上网用的APN的,从这个Log看下来好像不是这样。

为了验证这个现象,我在ril里面把COPS上报(当前注上的电话网络)里的mcc mnc强改成72416,然后用联通卡在国内测。发现居然可以用3gnet(46001)正常上网。

这就说明android 层选择数据网络的 apn确实不是根据cops 里面报上来的mcc mnc来确定的,那是根据什么来确定的呢,只能看 android代码了。

代码查下来,发现Android在开机后,会生成一个备选的apn列表,那这个列表是什么时候生成的,基于什么标准来选备用apn的呢?

在GsmDataConnectionTracker.java 中可以看到,有两个事情会导致这件事情发生,一个是 onRecordsLoaded, 一个是onApnChanged, APN change 这种情况应该发生的不多,先不管。

继续查代码,在SIMRecords.java中可以看到,是在onAllRecordsLoaded中上报RecordsLoad的,估计应该是SIM卡中信息都读出来之后,即STK对话框跳出来之后,没详细验证,有兴趣的可以去试试看。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值