第5章 SIM卡锁定PIN解锁流程

第5章 SIM卡锁定PIN解锁流程

1、插卡后,在卡初始化过程中,UiccController会从底层获取card状态,会知道要不要进行PIN校验,如果开启就暂停卡初始化流程,并弹出PIN输入框,输入正确的PIN之后,继续从卡中取信息,完成后续流程。

Sim锁定之后,开机会调用一个类,显示“请输入pin”的界面,输入pin密码之后,点击ok,调用checkPin();

通过启动一个线程CheckSimPin来调用TelephonyManager的supplyPinResultForSubscriber()接口;

并注册一个类似于Callback的虚函数onSimLockChangedResponse()并实现,这样当supplyPIN()调用返回时,触发该Callback函数。

KeyguardSimPinView.java类里面查看:

 

图5.1调用supplyPinReportResultForSubscriber()

  1. 查看PhoneInterfaceManager中的supplyPinReportResultForSubscriber()

首先创建一个线程并启动来维护一个Handler用于接收RIL传来的(SUPPLY_PIN_COMPLETE)消息。checkSimPin是IccCard类型。随后调用IccCard的supplyPin()方法并将Handler注册上去,此后一直wait,直到Hander收到指定消息后将其唤醒返回,并将操作结果传给其调用者。如果成功,返回值为true,代表PIN码验证成功。

unlockSim(IccCard …)里面的参数是IccCard类型的,下一步我们要去IccCard看。

  1. 查看PhoneInterfaceManager中的supplyPinReportResultForSubscriber

 

图5.2 supplyPinReportResultForSubscriber()调用unlockSim()

  1. UnclockSim()用的是IccCard的参数

图5.3 UnclockSim()用的是IccCard的参数

  1. 去IccCard看supplyPIN()

图5.4

  1. IccCardProxy是IccCard的代理,去IccCardProxy里面看一下supplyPin(),我们发现调用的是UiccApplication的supplyPin()

 

图5.5调用UiccApplication的supplyPin()

  1. 调用UiccApplication的supplyPin()

 

图5.6将Handler注册上去

 

图5.7将handleMessage处理,调用parsePinPukErrorResult()

parsePinPukErrorResult()函数:

 

图5.8返回一个attemptsRemaining,即result

接着我们看一下result:

 

图5.9如果成功,返回值为true,代表PIN码验证成功。

此时KeyguardSimPinView中的onSimLockChangedResponse()方法会被调用,它会通知KeyguardUpdateMonitor去更新SimState的状态为IccCard.State.READY,并通知锁屏程序解锁成功。

   如果失败,KeyguardSimPinView界面会一直存在,直到连续输入三次失败后,IccCard.java会发出一个Action为”ACTION_SIM_STATE_CHANGED_LOCKED”的广播,由于KeyguardUpdateMonitor对它进行了监听,所以它的onReceive()会被触发,并根据Intent携带的Extras进行SIMState的修改,此时由于reason为“PUK”,故将SIMState置为PUK_ REQUIRED,并触发所有注册监听SIM状态改变的Callback。KeyguardViewMediator的onSimStateChanged()被调用,由于SIMState状态为PUK_ REQUIRED,所以屏幕Mode被设置为LockScreen此时会进入锁屏界面按道理此时需要输入PUK码进行PIN码的修改。但是由于目前的流程中没有对PUK码的请求输入进行处理,所以导致锁屏界面解锁后整个界面不可操作,具体原因可能要调查现有的锁屏程序,不过据我所知目前Android原生态的锁屏都有这个问题,即一旦PIN码锁住之后,手机使用不了,必须将SIM拔出在支持PUK解锁的手机上解锁之后才可以继续使用。

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值