微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 过期卡锁卡需求-卡2依赖卡1(L版本)

过期卡锁卡需求-卡2依赖卡1(L版本)

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
很多运营商要求过期卡能当作是无效卡来处理。如果有依赖关系,其依赖关系不起作用.
卡2依赖卡1,如果卡1插入过期卡,卡2也要无法使用.
[SOLUTION]
过期卡是不能注册上网络的,所以判断的方法就是看是否能注册上网络。如果不能注册上,则认为是
Expired SIM Viettel.
但是因为网络环境,有效卡也有可能无法注册上网络,在当次开机会被识别为过期卡。不过下一次
开机如果能正常注册上网络,还是能识别出来是有效卡,这种case贵司要考虑清楚。
如果有其他的方式识别过期卡,还请使用其他方式具体方案来实现需求。详细需求分析请参考
FAQ12122。
L版本客制化方案如下:
Modem端
请参考DMS文档“SIM-ME lock",配置NVRAM_EF_SML_DEFAULT。
APP端
a. KeyguardUpdateMonitor.java
当卡2上报NETWORK_LOCKED,检查卡1是否成功注册上网络, 如果是则需在keyguard中解锁卡2。在
KeyguardUpdateMonitor.proceedToHandleSimStateChanged()中做如下修改:
private void proceedToHandleSimStateChanged(SimArgs simArgs) {
if ((IccCardConstants.State.NETWORK_LOCKED == simArgs.simState) &&
KeyguardUtils.isMediatekSimMeLockSupport()) {
//Customization START
//卡2当前被SIM ME locked住;如果卡1成功注册上网络,则解锁卡2.
else if(simArgs.slotId == PhoneConstants.SIM_ID_2){
if(false == isExpiredSIM(PhoneConstants.SIM_ID_1) ){
//参考FAQ12121 [SEC]在app端创建线程来解锁SIM ME lock
//mPasswd为modem配置的解锁密码.
new simMeCheckThread(simArgs.slotId, mPasswd).start();
}
else
//走正常解锁流程
new simMeStatusQueryThread(simArgs).start();
}
else
//Customization END
}

}
//L上用于判断是否是过期卡的方法
public static boolean isExpiredSIM (int slotId) {
ServiceState = null;
boolean hasService = false;
ITelephonyEx phoneEx =
ITelephonyEx.Stub.asInterface(ServiceManager.checkService("phoneEx"));
if (phoneEx != null) {
final long [] subIds = SubscriptionManager.getSubId(simId);
Log.i(TAG, "isExpiredSIM, slotId = " + simId + ",subIds = " + subIds);
if (subIds != null && subIds.length != 0) {
long subId = subIds[0];
Bundle bd = phoneEx.getServiceState(subId);
ss = ServiceState.newFROMBundle(bd);
}
}
if (ss != null) {
// 如果不需要支持数据卡可以只保留第一个case
switch (ss.getVoiceRegState()) {
Log.i(TAG, "ServiceState:" + ss);
case ServiceState.STATE_power_OFF:
hasService = false;
case ServiceState.STATE_OUT_OF_SERVICE:
case ServiceState.STATE_EMERGENCY_ONLY:
hasService = (ss.getDataRegState() == ServiceState.STATE_IN_SERVICE);
default:
hasService = true;
}
}
Log.i(TAG, "isExpiredSIM[" + simId + "] = " + hasService);
return hasService ? false : true;
}
b. GSMphone.java
当卡1成功注册上网络时,检查卡2是否被NETWORK_LOCKED, 如果是则需在GsmPhone中解锁卡2.
//GSMPhone.java
private boolean isFirstBoot = true; //定义一个变量,只有在开机第一次注册上
网络的情况下,会去解锁
//在GSMPhone.hanleMessage()的case EVENT_REGISTERED_TO_NETWORK中添加方法
unlockRelatedSim(),定义如下:
unlockRelatedSim(){
boolean isGeminiSupported =
SystemProperties.get("ro.mtk_gemini_support").equals("1");
//(1) 卡1成功注册上网络了
if(isFirstBoot &&isGeminiSupported && (getPhoneId() ==
PhoneConstants.SIM_ID_1))
{
//TODO:调用TelephonyManager.getSimState(PhoneConstants.SIM_ID_2)获取卡2状
态,
//如果为SIM_STATE_NETWORK_LOCKED,则调用supplyNetworkDeper
sonalization()来解锁卡2
isFirstBoot = false; //确保下次注册网络不会引起解锁操作
}
LOGD("unlockRelatedSim: getPhoneId= " + getPhoneId());
}
如果是过期卡双卡相互依赖的需求,
KK版本请参考FAQ12123 [SEC]过期卡锁卡需求-双卡相互依赖
L 版本请参考FAQ13806[SEC]过期卡锁卡需求-双卡相互依赖(L版本)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top