desativar solicitação de PIN após o modo avião

10

Ao ligar o telefone, é solicitado que você digite o PIN do SIM - uma boa medida de segurança, para evitar que "estranhos" causem custos. Agora, o mesmo se aplica ao retornar do modo avião: é preciso inserir o PIN do SIM novamente. O que torna inúteis alguns economizadores de energia: se um aplicativo, por exemplo, entra no modo avião com perda de sinal (consulte: O que é o modo de espera do celular e como posso evitar que ele coma minha bateria? ), Não seria possível retornar à operação normal sem a interação do usuário .

Estou procurando uma maneira de desativar seletivamente : Tenha a solicitação do PIN ativa ao ligar o dispositivo - mas não seja solicitado o PIN do SIM ao retornar do modo avião.

Por favor, não confunda isso com "proteção de teclado": não estou perguntando sobre o bloqueio de tela (PIN / padrão / senha). Aqui eu conheço o caminho, pois há uma API para uso dos aplicativos (para que eu possa, por exemplo, desativar temporariamente isso com o Tasker ).

Sei que isso funciona com dispositivos Samsung - mas de preferência quero uma solução independente de dispositivo que funcione para todos os fabricantes.

Izzy
fonte
2
Realmente! Deixe-me citar a pergunta acima: Estou procurando uma maneira de desativar seletivamente isso - para não desativar completamente a verificação. Sei que pode ser completamente desabilitado (que é o que uso atualmente) - mas quero desabilitá-lo apenas para voltar do modo avião, não para inicialização do dispositivo.
Izzy

Respostas:

1

AVISO LEGAL

  1. Isso precisa de raiz. Não há maneira de contornar isso.
  2. Seu dispositivo deve estar executando o Android 4.1 ou superior
  3. Esta solução alternativa pode ser muito avançada para alguns usuários. Apenas tente aplicá-lo quando souber o que está fazendo.
  4. Não me responsabilizo se algo der errado ou Ragnarök começar durante o processo. Você está fazendo isso por sua conta e risco. Prossiga com cuidado.
  5. Eu não sou o autor ou afiliado a qualquer um dos mods mencionados. Eu apenas encontrei isso e estou compartilhando para seu benefício.

GAMBIARRA

Encontrei uma solução alternativa para o problema que está funcionando perfeitamente em um Samsung Galaxy S2 com o Cyanogenmod 10.2 e o Dorimanx Kernel 9.41 instalados. Os passos necessários são os seguintes:

  1. Tenha certeza de que seu dispositivo é roteado.

  2. Baixe e instale o Xposed Framework Installer .

  3. Quando o Xposed solicitar root em qualquer lugar no futuro próximo, conceda-o .

  4. Abra o aplicativo e clique em Framework-Tab.

  5. Clique em Install/Update.

  6. Reinicie .

  7. Baixe e instale o Jelly Bean 4.x Airplane Mode Helper .

  8. Abra Xposed Framework Installer-App novamente e selecione Modules.

  9. Marque (ativo) Jelly Bean 4.x Airplane Mode Helper.

  10. Reinicie .

  11. Aberto Jelly Bean 4.x Airplane Mode Helper.

  12. Marque (ativo) Ativado .

  13. Reinicie .

É isso aí! O modo avião deve funcionar novamente como nas versões anteriores do Android e não solicita mais o PIN do SIM ao ser desligado. No entanto, ele ainda é inicializado, mantendo o cartão SIM seguro. Eu configurei um procedimento automatizado de economia de bateria com os Perfis de localização do Llama semelhantes ao descrito aqui (Thx um monte, Izzy) e está funcionando perfeitamente.

Boa sorte pessoal!

FuzzyQ
fonte
11
Muito obrigado pela sua resposta! Acabei de editá-lo para melhorar a formatação (listas) e adicionei o fato de que ele requer JB +. Como meus dispositivos ainda não estão executando o JB, não posso testá-lo - mas suspeito que você tenha perdido a parte mais importante da pergunta (pelo menos você não a mencionou): Ele solicita o PIN do SIM ao retornar do avião modo - ou isso pode ser pulado desta maneira?
Izzy
11
Fique tranqüilo, entendi completamente o seu problema e minha resposta é exatamente o que você estava procurando;) - ele não solicita o PIN do SIM ao retornar do modo de avião, mas ainda é inicializado. Portanto, sua segurança está sendo mantida, mas o script de economia de bateria está funcionando novamente. Obrigado pela atualização de formatação!
FuzzyQ 27/09/13
Adicionei as informações mais importantes como você tinha razão - esqueci totalmente de mencionar o fato de que isso remove a necessidade de desbloquear seu SIM novamente após o modo avião.
FuzzyQ 27/09/2013
11
Nesse caso, é exatamente o que eu estava procurando: Trabalhos automatizados funcionam sem intervenção manual, mas o dispositivo ainda está protegido quando se trata de "inicialização" (isto é, após uma inicialização). Excelente! Eu votei por agora. Como também não posso testar a solução de t0mm13b, tenho que confiar em você com relação ao meu "accept": esta parece ser a solução mais promissora (e gratuita!) Até agora, embora limitada ao JB +.
Izzy
Sabe, é engraçado como cheguei lá em primeiro lugar. Encontrei sua pergunta e resposta para o problema de espera da célula e logo acabei com o problema no modo avião SIM-PIN. Desde que eu uso o Xposed Framework há algum tempo, tive a ideia de procurar um módulo xposed que lida com o problema. :)
FuzzyQ
8

A resposta está na fonte ... parece que a propriedade para solicitar o bloqueio de pinos está embutida em build.propou 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_STATEreferida 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 shelle chamando getprope, setproppara 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.

t0mm13b
fonte
Obrigado pela explicação detalhada, t0mm13b! Portanto, devemos assumir que a Samsung e a LG alteraram o código em todos os lugares mencionados - se os relatórios que recebi sobre dispositivos Samsung e LG (onde as pessoas disseram que poderiam desativar a verificação do PIN do SIM separadamente, conforme descrito na minha pergunta) são corrigir?
Izzy
Obrigado novamente! Se você pudesse dizer se encontraria essa configuração no CM, e desde quando ela está lá, isso já seria uma grande ajuda - pois o CM está disponível para muitos dispositivos :) Meus dispositivos estão todos executando o CM 7.x, então eu foi possível verificar - embora eu ainda não encontrei esse cenário (é por isso que estou perguntando o lugar para onde procurar;)
Izzy
Tente Configurações> Configurações de localização e segurança, bloqueio do cartão SIM?
t0mm13b 27/09/12
Eu tive que excluir o comentário que era uma resposta para sua pergunta lá dentro, o mesmo está presente nas fontes AOSP (pela primeira vez vi como meu cartão SIM já está desbloqueado e livre de bloqueio de solicitação de pinos)
t0mm13b
11
Não confirmado para Gingerbread (CM7.2 no meu Motorola Droid² / Milestone²). É verdade que o PIN do SIM pode ser configurado no local descrito - mas somente ligado / desligado, não seletivo para "somente na inicialização". Desculpa.
Izzy
3

Não tenho certeza de que você precisa fazer o que está tentando fazer.

Você pode, em vez disso:

  • Configure duas Taskertarefas para ativar / desativar tudo o que o modo de ativação / desativação Airplanefaz.
  • Nunca use realmente o seu Airplanemodo. Use suas Taskertarefas.

Pode ser necessário verificar se algum aplicativo está ativado para ligar automaticamente um rádio de hardware. Observe se um aplicativo tenta sincronizar em segundo plano ou o que for, eles podem tentar ativar os rádios desativados. Nesse caso, desative a capacidade desse aplicativo de ativar automaticamente seu Wi-Fi, por exemplo. Digo isso porque o Airplanemodo certamente interrompeu as conexões WiFi inesperadas antes, mas não mais, se você tentar esta resposta.

Você também pode configurar Taskerpara sempre entrar no Airplanemodo no desligamento. Dessa forma, você veria o PIN Lock no momento da inicialização.

zero2cx
fonte
Obrigado, zero2cx - mas não estou pedindo por mim sozinho, e não especialmente por Tasker (estou ciente do fato de que poderia desabilitar as coisas separadamente aqui; mas desabilitar o rádio celular separadamente não funciona com meu Milestone²). Nas respostas das perguntas vinculadas, também menciono outros dois aplicativos. Eles alegadamente exigem que o PIN seja inserido ou desativado, pois eles usam o modo avião. Portanto, entenda que eu não quero uma solução Tasker específica (como muitos consideram a Tasker muito complexa), mas uma solução genérica para fazer o que pedi: desabilite a solicitação de PIN ao retornar apenas do modo avião.
Izzy
OK. Estou perplexo, então. Tem que haver uma maneira de alternar com software, mas de uma maneira mais sutil. Como a Samsung permite fazer isso?
Zero2cx 24/09/12
Não sei dizer (não tenho um dispositivo Samsung). Mas tenho relatos de que é possível em muitos (todos?) Dispositivos Samsung e também na LG. No meu Marco2, eu não verifiquei explicitamente, pois meu SIM atual estava no meu HTC Buzz / Wildfire antes, tive que desativar completamente o PIN do SIM para esse fim.
Izzy