sim卡 pin码解锁流程
1、 PIN码解锁界面属于Phone Policy的一部分,代码位置在
\frameworks\base\policy\src\com\android\internal\policy\impl\SimUnlockScreen.java。
当用户输入PIN码按下OK键时,会调用checkPin()函数通过启动一个线程CheckSimPin来调用TelephonyManager的supplyPin()接口,
并注册一个类似于Callback的虚函数onSimLockChangedResponse()并实现之,这样当supplyPin()调用返回时,触发该Callback函数。
通过 CheckSimPin 线程 run()方法ITelephony.Stub.asInterface(ServiceManager.checkService("phone")).supplyPin(mPin);
2、supplyPin()接口的具体实现在PhoneInterfaceManager中,代码位置在packages/apps/Phone/src/com/android/phone/PhoneInterfaceManager.java
supplyPin(string pin)调用==》checkSimPin.unlockSim(null, pin);==》》unlockSim(String puk, String pin)==》》mSimCard.supplyPin(pin, callback);
3、mSimCard 就是\frameworks\base\telephony\java\com\android\internal\telephony\IccCard.java 里调用 supplyPin (String pin, Message onComplete)
==》mPhone.mCM.supplyIccPin(pin, mHandler.obtainMessage(EVENT_PINPUK_DONE, onComplete));
mCM其实就是(\frameworks\base\telephony\java\com\android\internal\telephony\RIL.java)Ril.java文件====》
supplyIccPin(String pin, Message result)===》supplyIccPinForApp(pin, null, result); 这样就可通过RILSender 把命令发给AT,等待RILReciver 响应。
--------------------------------------------------------------------
AT+CPIN?
OK
+CPIN: SIM PIN
AT+CPIN=1234
OK
+CPIN: READY
====================
AT+CPIN=1234,(null) 这个是不对的。4.0上
1、 PIN码解锁界面属于Phone Policy的一部分,代码位置在
\frameworks\base\policy\src\com\android\internal\policy\impl\SimUnlockScreen.java。
当用户输入PIN码按下OK键时,会调用checkPin()函数通过启动一个线程CheckSimPin来调用TelephonyManager的supplyPin()接口,
并注册一个类似于Callback的虚函数onSimLockChangedResponse()并实现之,这样当supplyPin()调用返回时,触发该Callback函数。
通过 CheckSimPin 线程 run()方法ITelephony.Stub.asInterface(ServiceManager.checkService("phone")).supplyPin(mPin);
2、supplyPin()接口的具体实现在PhoneInterfaceManager中,代码位置在packages/apps/Phone/src/com/android/phone/PhoneInterfaceManager.java
supplyPin(string pin)调用==》checkSimPin.unlockSim(null, pin);==》》unlockSim(String puk, String pin)==》》mSimCard.supplyPin(pin, callback);
3、mSimCard 就是\frameworks\base\telephony\java\com\android\internal\telephony\IccCard.java 里调用 supplyPin (String pin, Message onComplete)
==》mPhone.mCM.supplyIccPin(pin, mHandler.obtainMessage(EVENT_PINPUK_DONE, onComplete));
mCM其实就是(\frameworks\base\telephony\java\com\android\internal\telephony\RIL.java)Ril.java文件====》
supplyIccPin(String pin, Message result)===》supplyIccPinForApp(pin, null, result); 这样就可通过RILSender 把命令发给AT,等待RILReciver 响应。
--------------------------------------------------------------------
AT+CPIN?
OK
+CPIN: SIM PIN
AT+CPIN=1234
OK
+CPIN: READY
====================
AT+CPIN=1234,(null) 这个是不对的。4.0上