android sim puk

来源:互联网 发布:java 泛型方法使用 编辑:程序博客网 时间:2024/05/02 00:28

IccCard.java --->SimCard.java ----> GsmPhone.java ------> PhoneInterfaceManager.java ------->SimUnlockScreen.java -------> LockPatternKeyguardView.java     ------>KeyguardUpdateMonitor.java

 

 

KeyguardViewManager.java     ------ >       KeyguardViewMediator.java -------> PhoneWindowManager.java   ------> WindowManagerService.java   -------> ServerThread.java

 

 

KeyguardUpdateMonitor.java 现在有两个IccCard.State , 分别代表G网和C网,如下:

 

 

    private IccCard.State mSimState = IccCard.State.READY;

 

    //jmhc ghd 2010.12.21 add{

    private IccCard.State mSimStateGsm = IccCard.State.READY;

    private String mPhoneType;

    //jmhc ghd end }

 

 

通IccCard.java 发出的broadcast,分别设置 mSimState 和mSimStateGsm状态, 现在的问题是KeyguardUpdateMonitor怎么把这个两种不同

的状态,传人SimUnlockScreen和LockScreen,并且在SimUnlockScreen和LockScreen中如何表示.

 

 

LockScreen 通过方法onSimStateChanged()得到sim卡的状态,在单卡中SimUnlockScreen不需要知道sim卡的状态,一旦SimUnlockScreen

被初始化,就确认为sim卡已锁,  在双卡中,SimUnlockScreen需要知道两张卡的状态,做一些处理。

 

 

LockScreen 中针对sim卡状态分了许多种 如下:

 

 /**

         * Normal case (sim card present, it's not locked)

         */

        Normal(true),

 

        /**

         * The sim card is 'network locked'.

         */

        NetworkLocked(true),

 

        /**

         * The sim card is missing.

         */

        SimMissing(false),

 

        /**

         * The sim card is missing, and this is the device isn't provisioned, so we don't let

         * them get past the screen.

         */

        SimMissingLocked(false),

 

        /**

         * The sim card is PUK locked, meaning they've entered the wrong sim unlock code too many

         * times.

         */

        SimPukLocked(false),

 

        /**

         * The sim card is locked.

         */

        SimLocked(true);

 

 

现在,如果我要加入对另外一个卡状态的表示,那么两个状态结合在一起就更多了,简单的处理是,在现有的各个状态中,

对两个卡分别做一个判断,更新其状态。

 

 

 

KeyguardUpdateMonitor.java 中增加变量

 

mCurrectPhoneType;

mGsmPhoneType;

mCdmaPhoneType;

 

接收IccCard.java 的broadcast ,并存储状态,其中,mCurrectPhoneType 存在的问题是,mCurrentPhone receive 这边已经更新了许多状态了,handleSimStateChange,就只能处理最后一种了; mGsmPhoneType 和mCdmaPhoneType 存在的问题是,当两个卡都pin锁以后,解锁一个,连带的会对另外一个状态有所改变。

 

当我记录这些想法的时候,另外一个想法又出现在我的脑海中,那就是从底层,控制两个卡的状态。以上两种路走不同,也就是没有走对路。

 

今天,实现了一个简单的解决办法

 

KeyguardUpdateMonitor.java 中方法handleSimStateChange()会接受IccCard.java 的broadcast。这里区分是G网还是C网,是通过IccCard.java发broadcast 时把电话类型作为intent 参数,然后直接把intent 做为参数传人handleSimStateChange(),再做判断,这样就省略了

上面的mCurrectPhoneType, mGsmPhoneType,mCdmaPhonetype 等参数。

 

机器启动后,会查询C卡,G卡的状态,一旦有任意一张卡状态为PIN锁定,就会初始化SimUnlockScreen.java, 这样 就有一个问题,SimUnlockScreen 已经初始化完了,另外一张卡的PIN锁定状态才设置成功,使得SimUnlockScreen.java状态并不正确。解决这个问题的做法是,在KeyguardUpdateMonitor.java中再加一个broadcast, 在SimUnlockScreen.java加一个receiver, 这样可以主动去修改SimUnlockScreen.java 的状态

 

 

 

RIL

 

IccCardStatus

IccCardApplication

 

IccCard.java 在mHandler的方法handleMessage()中通过 mPhone.mCM.getIccCardStatus(obtainMessage(EVENT_GET_ICC_STATUS_DONE)); 调用Ril.java, Ril.java返回消息自然也在mHanlder中,处理流程是getIccCardStatusDone(ar)  ---->handleIccCardStatus((IccCardStatus) ar.result)---------->getIccCardState()

 

 

 

 

 

 

SIM 卡的部分AT

 

 

D/AT-GSM  ( 1046): AT> ATE0Q0V1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> ATE0Q0V1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> ATS0=0

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CMEE=1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CREG=2

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CGREG=1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CCWA=1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CMOD=0

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CSSN=0,1

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+COLP=0

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CSCS="HEX"

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CUSD=1

D/AT-GSM  ( 1046): AT< +CME ERROR: 11

D/AT-GSM  ( 1046): AT> AT+CGEREP=1,0

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CMGF=0

D/AT-GSM  ( 1046): AT< OK

D/AT-GSM  ( 1046): AT> AT+CPMS="SM","SM","SM"

D/AT-GSM  ( 1046): AT< +CPMS: 0, 0, 0, 0, 0, 0

 

 

 

 

 

 

 

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

2010-12-23 ��上��午07:05:52 com.ibm.icu4jni.util.Resources createTimeZoneNamesFor

INFO: Loaded time zone names for zh_CN in 597ms.

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> ATE0V1

D/AT-CDMA (  788): AT> AT+CFUN=0

[   18.921508] [DPRTTY] BP mailbox is timeout.

[   18.925811] GPIO-118 autorequested

D/AT-CDMA (  788): AT< READY

D/AT-CDMA (  788): AT< +CREG: 0,0,0

D/AT-CDMA (  788): AT< ^SIMST: 255

I/RIL-CDMA(  788): onUnsolicited SIMST: ^SIMST: 255

E/RILC-CDMA(  788): unsupported unsolicited response code 1032

D/AT-CDMA (  788): AT< ^SIMST: 1

I/RIL-CDMA(  788): onUnsolicited SIMST: ^SIMST: 1

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< O[   18.976287] init: starting 'bootanim'

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK

D/AT-CDMA (  788): AT< OK                                                                                                                     

D/AT-CDMA (  788): AT> ATE0V1                                                                                                                 

D/AT-CDMA (  788): AT< OK                                                                                                                     

D/AT-CDMA (  788): AT> ATS0=0                                                                                                                 

D/AT-CDMA (  788): AT< OK                                                                                                                     

D/AT-CDMA (  788): AT> AT+CMEE=2                                                                                                              

D/AT-CDMA (  788): AT< OK                                                                                                                     

D/AT-CDMA (  788): AT> AT+CMGF=1                                                                                                              

D/AT-CDMA (  788): AT< OK                                                                                                                     

D/AT-CDMA (  788): AT> AT+CTA=10                                                                                                              

D/AT-CDMA (  788): AT< OK                   

 

 

 

 

UIM --------------------lock

D/RILJ-CDMA(  907): [0243]> SET_FACILITY_LOCK

D/RIL-CDMA(  788): onRequest: SET_FACILITY_LOCK

D/AT-CDMA (  788): AT> AT+CLCK="SC",1,"1234",7

D/AT-CDMA (  788): AT< OK

D/RILJ-CDMA(  907): [0243]< SET_FACILITY_LOCK {}

D/CDMA    (  907): [IccCard] EVENT_CHANGE_FACILITY_LOCK_DONE: mIccPinLocked= true

 

 

 

UIM ---------------------unlock

D/RILJ-CDMA(  907): [0251]> SET_FACILITY_LOCK

D/RIL-CDMA(  788): onRequest: SET_FACILITY_LOCK

D/AT-CDMA (  788): AT> AT+CLCK="SC",0,"1234",7

D/AT-CDMA (  788): AT< OK

D/RILJ-CDMA(  907): [0251]< SET_FACILITY_LOCK {}

D/CDMA    (  907): [IccCard] EVENT_CHANGE_FACILITY_LOCK_DONE: mIccPinLocked= false

 

 

UIM -------------------enter

D/RILJ-CDMA(  907): [0021]> ENTER_SIM_PIN

D/RIL-CDMA(  788): onRequest: ENTER_SIM_PIN

D/AT-CDMA (  788): AT> AT^CPIN="1234"

D/AT-CDMA (  788): AT< OK

D/RIL-CDMA(  788): unlocking sim card simStatus=3, need sleep 10s for modem init sim card

 

 

 

 

SIM ------------------lock

D/RILJ-GSM(  907): [0318]> SET_FACILITY_LOCK

D/RIL-GSM (  787): onRequest: SET_FACILITY_LOCK

D/RIL-GSM (  787): RIL_REQUEST_SET_FACILITY_LOCK .........................

D/AT-GSM  (  787): AT> AT+CLCK="SC",1,"1234",7

 

D/AT-GSM  (  787): AT< OK

D/RILJ-GSM(  907): [0318]< SET_FACILITY_LOCK {}

D/GSM     (  907): [IccCard] EVENT_CHANGE_FACILITY_LOCK_DONE: mIccPinLocked= true

 

 

 

 

SIM ------------------unlock 

D/RILJ-GSM(  907): [0319]> SET_FACILITY_LOCK

D/RIL-GSM (  787): onRequest: SET_FACILITY_LOCK

D/RIL-GSM (  787): RIL_REQUEST_SET_FACILITY_LOCK .........................

D/AT-GSM  (  787): AT> AT+CLCK="SC",0,"1234",7

D/AT-GSM  (  787): AT< OK

D/RILJ-GSM(  907): [0319]< SET_FACILITY_LOCK {}

D/GSM     (  907): [IccCard] EVENT_CHANGE_FACILITY_LOCK_DONE: mIccPinLocked= false

 

 

 

 

 

SIM ================================= enter

D/RILJ-GSM(  910): [0019]> ENTER_SIM_PIN

D/RIL-GSM ( 1063): onRequest: ENTER_SIM_PIN

D/AT-GSM  ( 1063): AT> AT^CPIN=1234                              --------------->>>>AT^CPIN="1234"

D/AT-GSM  ( 1063): AT< +CME ERROR: 100

D/RILJ-GSM(  910): [0019]< ENTER_SIM_PIN error: com.android.internal.telephony.CommandException: PASSWORD_INCORRECT

D/RILJ-GSM(  910): [0020]> GET_SIM_STATUS

D/RIL-GSM ( 1063): onRequest: GET_SIM_STATUS

D/AT-GSM  ( 1063): AT> AT+CPIN?

D/AT-GSM  ( 1063): AT< +CPIN: SIM PIN

D/AT-GSM  ( 1063): AT< OK

 

 

 

 

query

 

AT+CPIN?

 

 

 

 

 

puk  right

 

D/RILJ    (   99): [0024]> ENTER_SIM_PUK

D/RILD    (   33): onRequest: ENTER_SIM_PUK

D/AT      (   33): AT> AT^CPIN="01153813","1234"

D/AT      (   33): AT< OK

 

 

puk error

 

 

 

/dev/dprtty0

/dev/ttyS0

 

 

 

 

^CPIN:<code>,[<times>],<puk_times>,<pin_times>,<puk2_times>,<pin2_times>

 

 

 

 

GET_PIN_PUK_LEFT_COUNTS   CDMA

 

D/RIL-CDMA(  810): onRequest: GET_PIN_PUK_LEFT_COUNTS

D/AT-CDMA (  810): AT> AT^CPIN?

D/RILJ-CDMA( 1116): [0026]< REGISTRATION_STATE {4,  ,  , 0, -1, -1, -1, 0, -1, -1, 1, 0, -1, 0}

D/CDMA    ( 1116): [CdmaServiceStateTracker] Set CDMA Roaming Indicator to: 1. mCdmaRoaming = false, isPrlLoaded = fa1

D/CDMA    ( 1116): [CdmaServiceStateTracker] Poll ServiceState done: oldSS=[3 home null null null  Unknown CSS not su]

D/AT-CDMA (  810): AT< ^CPIN:SIM PIN,2,10,2,10,3

D/AT-CDMA (  810): AT< OK

D/RIL-CDMA(  810): AT+CPIN? response[0]=3

D/RIL-CDMA(  810): AT+CPIN? response[1]=2

D/RIL-CDMA(  810): AT+CPIN? response[2]=10

D/RIL-CDMA(  810): AT+CPIN? response[3]=2

D/RIL-CDMA(  810): AT+CPIN? response[4]=10

D/RIL-CDMA(  810): AT+CPIN? response[5]=3

D/RILJ-CDMA( 1116): [0027]< RIL_REQUEST_GET_PIN_PUK_LEFT_COUNTS {3, 2, 10, 2, 10, 3}

D/AT-GSM  (  809): AT< OK

 

 

 

 

 

GET_PIN_PUK_LEFT_COUNTS   GSM

>>>> at+epinc?

>>>> D/AT-GSM  (  809): AT< +EPINC: 0, 3, 10, 10

D/AT-GSM  (  809): AT< OK

 

 

 

 

 

 

logcat -s KeyguardUpdateMonitor &

 

logcat -s LockPatternKeyguardView &

 

logcat -b radio -s CDMA &

 

logcat -b radio -s GSM &

 

logcat -s SimUnlockScreen &

 

logcat -s KeyguardViewMediator &

 

logcat -s IccCard &

 

 

 

 

emulator -skin WVGA800 &

 

 

 

 

 

 

 

 

 

原创粉丝点击