Die Antwort liegt in der Quelle ... es scheint, dass die Eigenschaft, Pin-Lock anzufordern, in build.prop
oder eingebaut ist default.prop
.
Schauen Sie sich die Referenz in der TelephonyManager- Quelle zwischen den Zeilen 735 und 755 an.
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;
}
}
Der Schlüssel ist TelephonyProperties.PROPERTY_SIM_STATE
der, auf den an anderer Stelle zwischen den Zeilen 94 und 98 verwiesen wird .
//****** 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";
Nachdem Sie den Quellcode hier auf meinem Computer durchsucht haben, gebe ich Ihnen eine Vorstellung davon, wie oft diese Methode getSimState
aufgerufen wird. Beachten Sie die Namen der Java-Quelle, um festzustellen, wie sie in Android integriert ist, nicht nur in der Telefonieebene, sondern auch anderswo.
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() {
Geben diese Dateinamen im Sperrbildschirm einen Hinweis?
Theorie
Dies erfordert an dieser Stelle root, indem Sie das aufrufen adb shell
und aufrufen, getprop
und setprop
um dies zu tun, ist der einzige Teil dies, indem Sie aufrufen
adb shell getprop
erhalten die relevanten Informationen wie unten gezeigt zurück
sh-4.1# getprop
[gsm.sim.state]: [READY]
Diese subtile Eigenschaft scheint ab dem Moment des Einschaltens dynamisch in einem Backing-Property-Store erhalten zu bleiben und wird entsprechend der Anzahl der Dinge, dem Service und dem versehentlichen Herunterfallen des Mobilteils angepasst, wodurch die SIM-Karte möglicherweise herausgeschleudert wird sein Leser, der den Status der Karte in " nicht bereit " oder " unbekannt " ändern würde . ( Ref: system / core / include / cutils / properties.h und system / core / toolbox / [ getprop | setprop ] .c)
An diesem Punkt könnte theoretisch durch Aufrufen von setprop vor dem Sperren des Bildschirms dieses vorübergehend umgangen werden, aber andererseits könnte dies durch die Telefonieebene zurückgesetzt werden! Habe das nicht versucht! Was dazu führt ...
Fazit
Die einzige Möglichkeit, dies auszuschalten, besteht darin , die Pin-Lock-Anforderung auf der eigentlichen SIM-Karte effektiv zu deaktivieren . Dort wird das "magische" Bit-Flag auf dem gespeichert, in dem die RIL-Schicht der Telefonie es über die proprietäre Bibliothek von htc / samsung / qualcomm einliest, und dies würde verhindern, dass die Eigenschaft "PIN_REQUIRED" bis zum Ende erhalten bleibt die Schichten von Android.
Eine mögliche Problemumgehung nur für Android-Entwickler :)
Dies würde das Hacken und Neukompilieren der Quelle erfordern.
Für den Flugzeugmodus kann beim Aufrufen dieses Modus und Verlassen des Flugzeugmodus die Eigenschaft in zwei Teile aufgeteilt werden. Gsm.sim.state kann unverändert bleiben, es wird jedoch eine andere Eigenschaft entwickelt, z. B. gsm.sim.state. airplane.mode und weisen Sie einen Wert nach dem Vorbild von zu SIM_STATE_PIN_NOT_REQUIRED
und ändern Sie die Überprüfung des Flugzeugmodus, um diese Eigenschaft zu lesen. Wenn diese Option aktiviert ist, wird das Pin-Dialogfeld nicht angezeigt. Andernfalls wird es wie gewohnt dazu aufgefordert.