대답은 출처에 있습니다 ... 핀 잠금을 요청하는 속성이 build.prop또는에 내장되어있는 것 같습니다 default.prop.
전화선 735와 755 사이 의 TelephonyManager 소스 에있는 참조를 살펴보십시오 .
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 소스의 이름을 주목하십시오. 다른 곳.
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 카드를 떨어 뜨릴 수있는 실수로 핸드셋을 떨어 뜨릴 수 있습니다. 카드 상태를 " 준비 안 됨 "또는 " 알 수 없음 "으로 변경하는 리더 (참고 : system / core / include / cutils / properties.h 및 system / core / toolbox / [ getprop | setprop ] .c)
이제이 시점에서 이론적으로 화면을 잠그기 전에 setprop를 호출하면 일시적으로 우회 될 수 있지만 다시 전화 계층에 의해 재설정 될 수 있습니다! 시도하지 않았습니다! 어느 것이 이것을 이끌고 있습니까?
결론
유일한 방법 이 꺼지고 효과적이다 수 실제로 SIM 카드에 핀 로크 요청을 해제 . 여기에는 전화의 RIL 레이어가 독점적 인 htc / samsung / qualcomm의 라이브러리를 통해이를 읽고 "PIN_REQUIRED"속성이 지속되는 것을 막는 "마법"비트 플래그가 저장되어 있습니다. 안드로이드의 레이어.
가능한 해결 방법은 Android 개발자에게만 해당됩니다. :)
이를 위해서는 소스를 해킹하고 재 컴파일해야합니다.
비행기 모드의 경우 해당 모드로 들어가 비행기 모드를 나갈 때 속성을 2 개로 나눌 수 있으며 , gsm.sim.state 는 그대로 남겨 둘 수 있지만 gsm.sim.state 와 같은 다른 속성을 고안 할 수 있습니다 . airplane.mode 및의 행을 따라 값을 지정 SIM_STATE_PIN_NOT_REQUIRED하고 비행기 모드 확인을 수정하여 해당 속성을 읽은 다음 속성을 설정 한 경우 핀 대화 상자를 표시하지 마십시오.