A resposta está na fonte ... parece que a propriedade para solicitar o bloqueio de pinos está embutida em build.prop
ou default.prop
.
Veja a referência encontrada na fonte TelephonyManager , entre as linhas 735 e 755. Por uma questão de brevidade,
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;
}
}
A chave é TelephonyProperties.PROPERTY_SIM_STATE
referida em outro lugar , entre as linhas 94 e 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";
Depois de pesquisar o código fonte aqui na minha máquina, darei a você a idéia de quantas vezes esse método getSimState
é chamado. Observe os nomes da fonte java para descobrir como ele é integrado ao Android, não apenas na camada de telefonia, em outro lugar.
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() {
Esses nomes de arquivo dão uma pista, sim, na tela de bloqueio ...
Teoria
Isso requer raiz neste momento, invocando adb shell
e chamando getprop
e, setprop
para fazer isso, a única parte é essa, invocando
adb shell getprop
receberá de volta as informações pertinentes, como mostrado abaixo
sh-4.1# getprop
[gsm.sim.state]: [READY]
Essa propriedade sutil parece persistir dinamicamente em um armazenamento de propriedades de backup, a partir do momento da inicialização e é ajustada de acordo com o número de itens, serviços e sem mencionar a descida acidental do aparelho, que pode derrubar o cartão SIM. seu leitor que alteraria o estado do cartão para " não pronto " ou " desconhecido ". ( Ref: sistema / núcleo / include / cutils / properties.h e sistema / core / caixa de ferramentas / [ GetProp | SetProp ] .c)
Agora, nesse ponto, teoricamente, invocando setprop antes de bloquear a tela, ele pode ser contornado temporariamente, mas, novamente, isso pode ser redefinido pela camada de telefonia! Ainda não tentei isso! O que está levando a isso ...
Conclusão
A única maneira de desativar isso é desativar efetivamente a solicitação de bloqueio de pinos no cartão SIM real . É aí que o sinalizador de bit "mágico" é armazenado nele, no qual a camada RIL da telefonia o lê através da biblioteca proprietária da htc / samsung / qualcomm e isso impediria a proprietária da persistência da propriedade "PIN_REQUIRED" as camadas do Android.
Uma possível solução alternativa, apenas para desenvolvedores Android :)
Isso exigiria hackear e recompilar a fonte.
Para o modo avião, ao entrar nesse modo e sair do modo avião, a propriedade pode ser dividida em duas, gsm.sim.state pode ser deixado como está, mas crie outra propriedade, algo como isto, gsm.sim.state. airplane.mode e atribua um valor ao longo das linhas de SIM_STATE_PIN_NOT_REQUIRED
, e modifique a verificação do modo de avião, para ler essa propriedade e, se configurada para isso, não mostre a caixa de diálogo pin, caso contrário, como normalmente, solicite.