O android mantém um registro de quando é iniciado?

19

Estou criando um aplicativo de controle / responsabilidade parental para android. Consiste em um serviço de monitoramento executado em segundo plano e iniciado quando o telefone é inicializado.

Infelizmente, descobri que quando o Android é iniciado no "Modo de segurança", os serviços não são iniciados automaticamente e, por isso, meu aplicativo apresenta uma falha grave.

Enquanto no modo de segurança, a Web e outros aplicativos podem ser iniciados sem o meu serviço de monitoramento em execução.

Eu pensei que, se não for possível monitorar a atividade do aplicativo enquanto estiver no modo de segurança, talvez eu possa pelo menos fazer com que meu aplicativo detecte se o telefone estava anteriormente no modo de segurança. Talvez isso pudesse alertar o pai ou o parceiro de responsabilidade?

O Android mantém algum registro disso? Ou qualquer log de inicialização em geral? Estou muito aberto a sugestões e alternativas.

jws121295
fonte
2
Espero muito que não haja maneira de fazer isso.
RR
4
Eu acho que isso não deve ser fechado. Os desenvolvedores não são os únicos que poderiam estar interessados ​​nisso.
RR
Eu concordo com @ Richard. Esta não é especificamente uma questão de codificação, mas sobre como o Android funciona.
ale

Respostas:

13

Eu acho que você se surpreendeu, em suma, nada que você possa fazer!

Dê uma olhada nesta fonte que explica o motivo, especificamente nesta seção:

Partição do sistema e modo de segurança

A partição do sistema contém o kernel do Android, bem como as bibliotecas do sistema operacional, o tempo de execução do aplicativo, a estrutura e os aplicativos. Esta partição está definida como somente leitura. Quando um usuário inicializa o dispositivo no modo de segurança, apenas os aplicativos principais do Android estão disponíveis. Isso garante que o usuário possa inicializar o telefone em um ambiente livre de software de terceiros.

O Keywords está livre de software de terceiros

Editar:

Quando o Android é inicializado, ele mantém um cache do logcat, em um buffer temporário reservado encontrado em /dev/log. Esse buffer é reciclado quando atinge o limite, obviamente, quanto maior o limite, mais lento o Android fica com o spam contínuo no buffer de logcat, portanto, mantido no mínimo - iirc, é cerca de 64K:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Fonte: system/core/logcat/logcat.cpp

Não pergunte quantas linhas podem ser diferentes para cada aplicativo. Não é só isso, o logcat desaparece após a reinicialização!

t0mm13b
fonte
2
Você realmente não respondeu à pergunta, apenas reafirmou o que ele sabia, que o aplicativo dele não pode monitorar no modo de segurança. Adicione algo sobre os logs ou alternativas do modo de segurança e, em seguida, +1
Amendoim
1
@ Amendoim, o Android ainda registrará o logcat, mas apenas os serviços principais, nada mais! Não há alternativa para isso! E não há como os aplicativos de terceiros reconhecerem que havia um modo de segurança ativado porque, da próxima vez que sair do modo de segurança, ou seja, reiniciar normalmente, os aplicativos de terceiros "pensam" que nada aconteceu como em "nada para ver aqui ..." move along "
t0mm13b 18/07/12
1
Desculpe, editei meu comentário antes de vê-lo, mas como eu disse, você realmente não respondeu à pergunta dele. Portanto, uma alternativa seria verificar se o logcat estava sendo executado quando o aplicativo não estava? Obviamente, isso exigiria que a pessoa iniciasse não no modo de segurança em algum momento, mas pelo menos é uma solução realista.
Amendoim
O conteúdo do logcat ... é liberado para a /dev/nullreinicialização como "negócios como sempre" ... apenas dizendo .. :) E obrigado pelo voto negativo!
t0mm13b
Ah, eu não sabia disso ^^ vou votar desde que você ofereça uma resposta para a pergunta dele aqui :) Acho que você deve adicionar o material dos logs à sua resposta real. edit: Ah, eu não posso realmente votar até que você edite a resposta: p
Amendoim
6

Não é a melhor resposta, mas talvez as informações sejam úteis.

O único método que eu conheço que contém um log produzido pelo sistema após a reinicialização /proc/last_kmsg.

Se o kernel mantém ou não esse arquivo de log após uma reinicialização, depende das configurações fornecidas durante a compilação do kernel.

Minha experiência mostrou que alguns dispositivos de estoque (HTC) têm esse log ativado e outros não. Eu não vi um padrão consistente.

joeyk
fonte
Obrigado! Onde você aprendeu sobre esse log? Você tem alguma sugestão de como posso aprender sobre mais desses logs? Existe uma referência em algum lugar?
precisa saber é o seguinte
Caso alguém entre como eu, o log agora está em / sys / fs / pstore / console_ramoops. Não é um log completo como o dmesg, mas basicamente só tem informações sobre o último pânico do kernel e o que levou a ele.
Evan Langlois
adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logtrabalha com TWRP em OP3 com LineageOS baseados em 8 Android
beppe9000