即:SIM卡中的PLMN与注册上网络的PLMN不一致导致,跟是否是当地卡没有关系。
PLMN=MCC+MNN。
alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java中重新添加了该运营商的PLMN
例子:
radio_log.boot中,通过COPS的AT命令看出注册上的是63903的网络,
radio_log中,通过COPS看出注册上的网络是63902的网络。同时看到,卡槽1(slot0)的SIM卡的PLMN是63903,卡槽2(slot1)读取的SIM卡PLMN是63902.
所以根据我们的显示逻辑,卡1显示漫游,卡2 是正常。
怎样将A运营商的卡在 B的网络上注册时判定为非漫游
[SOLUTION]
1. 漫游判定的flow:
在GsmServiceStateTracker.java中如果网络发生变化就会call pollState方法去获取最新的网络状况,response用handlePollStateResult处理,其中roaming的判定modem通过+CREG上报。
2. 漫游客制化方法:
对于JB*, KK*及以后的版本:
在regCodeIsRoaming中有留了客制化接口,只需在customEhplmn二位数组的尾部加入一组item即可;
比如韩国operator KCT 45011的卡注册了operator SKT 45005的网络显示漫游,要求作为home plmn,不显示漫游:
Private String[][] customEhplmn = {{“46000”,“46002”, “46007”},
…,
{“310150”,“310170”,“310380”,“310410”},
{“45011”,“45005”}}