Jawabannya ada di sumber ... sepertinya properti yang meminta pin-lock dibangun ke dalam build.prop
atau default.prop
.
Lihatlah referensi yang ditemukan dalam sumber TelephonyManager , antara baris 735 dan 755. Untuk singkatnya,
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;
}
}
Kuncinya adalah TelephonyProperties.PROPERTY_SIM_STATE
yang dirujuk di tempat lain , antara baris 94 dan 98.
//****** 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";
Setelah mencari melalui kode sumber di sini di mesin saya, saya akan memberi Anda gagasan tentang seberapa sering metode getSimState
ini disebut, perhatikan nama-nama sumber java untuk mengetahui bagaimana terintegrasi dalam Android, tidak hanya di lapisan Telephony tetapi di tempat lain.
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() {
Apakah nama-nama file itu memberi petunjuk, ya, di layar kunci ...
Teori
Ini membutuhkan root pada titik ini, dengan memanggil adb shell
dan memanggil getprop
dan setprop
untuk melakukan ini, satu-satunya bagian adalah ini, dengan memohon
adb shell getprop
akan mendapatkan kembali informasi terkait seperti yang ditunjukkan di bawah ini
sh-4.1# getprop
[gsm.sim.state]: [READY]
Properti halus ini tampaknya secara dinamis bertahan menjadi toko properti pendukung, dari saat powering up dan disesuaikan sesuai, berdasarkan sejumlah hal, layanan, dan belum lagi secara tidak sengaja menjatuhkan handset yang dapat membuat kartu SIM keluar. pembacanya yang akan mengubah status kartu menjadi " tidak siap " atau " tidak dikenal ". ( ref: system / core / include / cutils / properties.h dan system / core / toolbox / [ getprop | setprop ] .c)
Sekarang pada titik ini, secara teoritis, dengan mengaktifkan setprop sebelum mengunci layar, itu bisa diatasi sementara, tapi sekali lagi, itu bisa dipasang kembali oleh lapisan telepon! Belum pernah mencobanya! Yang mengarah ke ini ...
Kesimpulan
Satu- satunya cara ini dapat dimatikan, adalah untuk secara efektif menonaktifkan permintaan pin-lock pada kartu sim yang sebenarnya . Di situlah bit-flag "magic" disimpan di situ, di mana layer RIL telepon membacanya melalui perpustakaan htc / samsung / qualcomm yang dipatenkan, dan itu akan mencegah propragasi dari tetap adanya properti "PIN_REQUIRED" melalui lapisan-lapisan Android.
Kemungkinan solusi, hanya untuk Pengembang Android :)
Ini membutuhkan peretasan dan kompilasi ulang sumber.
Untuk mode pesawat, ketika memasuki mode itu dan meninggalkan mode pesawat, properti dapat dipecah menjadi dua, gsm.sim.state dapat dibiarkan apa adanya, tetapi menyusun properti lain, seperti ini, gsm.sim.state. airplane.mode dan tetapkan nilai di sepanjang baris SIM_STATE_PIN_NOT_REQUIRED
, dan modifikasi pemeriksaan mode pesawat, untuk membaca properti itu dan jika diatur, jangan tampilkan kotak dialog pin, jika tidak seperti biasanya, minta.