答案在于源……似乎是请求锁定的属性内置于build.prop或中default.prop。
看看在TelephonyManager 源中找到的参考,在第735和755行之间。为简便起见,
public int getSimState() {
        String prop = SystemProperties.get(TelephonyProperties.PROPERTY_SIM_STATE);
        if ("ABSENT".equals(prop)) {
            return SIM_STATE_ABSENT;
        }
        else if ("PIN_REQUIRED".equals(prop)) {
            return SIM_STATE_PIN_REQUIRED;
        }
        else if ("PUK_REQUIRED".equals(prop)) {
            return SIM_STATE_PUK_REQUIRED;
        }
        else if ("NETWORK_LOCKED".equals(prop)) {
            return SIM_STATE_NETWORK_LOCKED;
        }
        else if ("READY".equals(prop)) {
            return SIM_STATE_READY;
        }
        else {
            return SIM_STATE_UNKNOWN;
        }
    }
关键是在94和98行之间的其他TelephonyProperties.PROPERTY_SIM_STATE位置引用的。
//****** SIM Card
/**
 * One of <code>"UNKNOWN"</code> <code>"ABSENT"</code> <code>"PIN_REQUIRED"</code>
 * <code>"PUK_REQUIRED"</code> <code>"NETWORK_LOCKED"</code> or <code>"READY"</code>
 */
static String PROPERTY_SIM_STATE = "gsm.sim.state";
在我的机器上搜索了源代码之后,我将为您提供getSimState调用此方法的频率的想法,注意一下Java源代码的名称,以了解如何将其集成到Android中,而不仅仅是在Telephony层中,别处。
services/java/com/android/server/am/BatteryStatsService.java 219:      int simState = TelephonyManager.getDefault().getSimState();
telephony/java/android/telephony/TelephonyManager.java 523:    public int getSimState() { 551:     * @see #getSimState 562:     * @see getSimState
policy/src/com/android/internal/policy/impl/KeyguardUpdateMonitor.java 478:    public IccCard.State getSimState() {
policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java 545:            final IccCard.State state = mUpdateMonitor.getSimState();
policy/src/com/android/internal/policy/impl/LockPatternKeyguardViewProperties.java 57:        final IccCard.State simState = mUpdateMonitor.getSimState();
policy/src/com/android/internal/policy/impl/LockScreen.java 273:       mStatus = getCurrentStatus(updateMonitor.getSimState());
policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java 173:                && (mUpdateMonitor.getSimState() == IccCard.State.ABSENT); 217:                final IccCard.State simState = mUpdateMonitor.getSimState(); 469:                && (mUpdateMonitor.getSimState() != IccCard.State.PUK_REQUIRED)) { 512:   secure = mUpdateMonitor.getSimState() == IccCard.State.PIN_REQUIRED 513:                            || mUpdateMonitor.getSimState() == IccCard.State.PUK_REQUIRED; 643:        final IccCard.State simState = mUpdateMonitor.getSimState(); 662:        final IccCard.State simState
= mUpdateMonitor.getSimState();
policy/tests/src/com/android/internal/policy/impl/LockPatternKeyguardViewTest.java 49:        public IccCard.State getSimState() {
在锁定屏幕上,这些文件名是否有提示?
理论
这需要根在这一点上,通过调用adb shell和调用getprop,并setprop要做到这一点,只有一部分是这样的,通过调用
adb shell getprop 将会取回相关信息,如下所示
sh-4.1# getprop
[gsm.sim.state]: [READY]
从上电之时起,这种微妙的属性似乎就动态地保留在了后备属性存储中,并且根据事物,服务的数量进行了相应的调整,更不用说意外掉下手机了,这可能会使SIM卡退出它的读卡器会将卡的状态更改为“ 未就绪 ”或“ 未知 ”。(ref: system / core / include / cutils / properties.h和system / core / toolbox /    [ getprop | setprop ] .c)
现在,从理论上讲,此时,在锁定屏幕之前调用setprop可以暂时绕开它,但是话又可以通过电话层将其重置!还没有尝试过!这导致了...
结论
可以关闭此功能的唯一方法是有效禁用实际sim卡上的密码锁定请求。那是存储“魔术”位标志的地方,电话的RIL层通过专有的htc / samsung / qualcomm的库将其读入,这将阻止扩展“ PIN_REQUIRED”属性的持久性Android的各层。
可能的解决方法,仅适用于Android开发人员:)
这将需要破解并重新编译源代码。
对于飞行模式,进入该模式并离开飞行模式时,可以将属性拆分为两个,可以按原样保留gsm.sim.state,但可以设计另一个属性,例如gsm.sim.state。 aircraft.mode并沿的方向分配一个值SIM_STATE_PIN_NOT_REQUIRED,然后修改飞行器模式检查以读取该属性,如果设置为该属性,则不显示“销钉”对话框,否则通常会提示该对话框。