微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > AP端如何不显示SIM ME lock界面

AP端如何不显示SIM ME lock界面

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
有些运营商需求,如果卡被SIM ME lock,就直接不让使用,期望不显示SIM ME lock界面来解锁.
[SOLUTION]
1.开机时,不显示卡的SIM ME lock界面
JB3.MP之前的修改如下: Phone处理
alps\packages\apps\Phone\src\com\android\phone\PhoneGlobals.java
private class PhoneGlobalsBroADCastReceiver extends BroadcastReceiver {
......
} else if (action.equals(TelephonyIntents.ACTION_SIM_STATE_CHANGED)) {
......
if ((IccCardConstants.INTENT_VALUE_ICC_LOCKED).equals(unlockSIMStatus) &&
(IccCardConstants.INTENT_VALUE_LOCKED_NETWORK).equals(unlockSIMReason)) {
Log.d(LOG_TAG, "do not show SIM ME LOCKED");
//把这个条件中的code都注释
JB3.MP以及之后的版本修改如下: keyguard处理
alps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\policy\src\com\android\internal\policy\impl\keyguard\
KeyguardUpdateMonitor.java
private final BroadcastReceiver mBroadcastReceiver = new
BroadcastReceiver() {
......
} else if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
......
if (IccCardConstants.State.NETWORK_LOCKED == simArgs.simState) {
//注释掉这一行,则不会显示SIM ME lock界面
// new simMeStatusQueryThread(simArgs).start();
KeyguardUtils.xlogD(TAG, "do not show SIM ME LOCKED");
}
L版本上的修改如下:
keyguard处理
alps/frameworks/base/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.j
ava
private void proceedToHandleSimStateChanged(SimArgs simArgs) {
if ((IccCardConstants.State.NETWORK_LOCKED == simArgs.simState) &&
KeyguardUtils.isMediatekSimMeLockSupport()) {
//if (KeyguardUtils.isMediatekSimMeLockSupport()) {
/// M: to create new thread to query SIM ME lock status
/// after finish query, send MSG_SIM_STATE_CHANGE message
//注释掉这一行,则不会显示SIM ME LOCK界面
//new simMeStatusQueryThread(simArgs).start();
// if (DEBUG) Log.d(TAG, "do not show SIM ME LOCKED ");
} else {

L1上还需要补充如下修改:
修改KeyguardUpdateMonitor.refreshSimState():
try {
state = State.intToState(simState);
//ADD START
if(state == State.NETWORK_LOCKED){
Log.d(TAG,"refreshSimState() ignore State.NETWORK_LOCKED.");
return false;
}
//ADD END
} catch(IllegalArgumentException ex) {
Log.w(TAG, "Unknown sim state: " + simState);
state = State.UNKNOWN;
}
2. 在点击某些需要用到卡的应用时,如call, contacts等也不显示卡的SIM ME lock界面
2.1在L之前版本上都需要做如下修改:
alps\mediatek\packages\apps\cellconnservice\src\com\mediatek\cellconnservi
ce\service\PhoneStatesMgrService.java
public int verifyPhoneState(int slot, int reqType,
iPhoneStatesCallback cb) throws RemoteException {
……
if (bSimReady) {
//增加一个当卡状态为SIM ME lock不需要show的case
if(PHONE_STATE_SIMMELOCKED == mPhoneStates[slot]) {
cb.onComplete(CellConnMgr.RESULT_ABORT);
Log.e(TAG, "verifyPhoneState donot show SIM ME LOCKED");
return CellConnMgr.RESULT_EXCEPTION;
}
2.2 L版本上:
修改alps/frameworks/opt/telephony/src/java/com/mediatek/internal/telephony/
CellConnMgr.java中的handleRequest()函数:
// 3.Unlock
// (only do this in case of flight mode has been truned of and radio has beend truned
on)
if (!((state & STATE_FLIGHT_MODE) == STATE_FLIGHT_MODE
|| (state & STATE_RADIO_OFF) == STATE_RADIO_OFF) &&
((state & STATE_SIM_LOCKED) == STATE_SIM_LOCKED)) {

try {
//增加如下代码:
// Query SIM state
int slotId = SubscriptionManager.getSlotId(subId);
TelephonyManager telephonyMgr = TelephonyManager.getDefault();
int simState = telephonyMgr. getSimState(slotId)
//增加以下判断条件
if(TelephonyManager.SIM_STATE_NETWORK_LOCKED == simState){
Rlog.d(TAG, "[handleRequest] donnot broadcast for SML");
}
else{
//非锁网状态才发送该广播
ITelephonyEx iTelEx = ITelephonyEx.Stub.asInterface(
ServiceManager.getService(Context.TELEPHONY_SERVICE_EX));
iTelEx.broadcastIccUnlockIntent(subId);
Rlog.d(TAG, "[handleRequest] broadcastIccUnlockIntent");
}

学习了~~~~~~~~~~~~~~

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

网站地图

Top