Eu tenho um dispositivo de TV nVidia Shield, que está executando o Android TV.
Para integrar isso à minha configuração de home theater, preciso determinar se o dispositivo está ativo ou em suspensão.
Para meus outros dispositivos, apenas uso o ping para determinar isso. No entanto, como os dispositivos Android estão basicamente sempre sempre ativos, isso não funciona nesse caso.
Uma maneira, é claro, seria escrever um aplicativo simples, que abra uma porta TCP quando o dispositivo estiver ativo e a feche quando estiver dormindo.
Minha pergunta é se existe uma maneira mais simples, talvez um aplicativo existente ou alguma outra maneira de fazer isso sem desenvolver meu próprio aplicativo para fazer isso.
standby
android-tv
Mika Fischer
fonte
fonte
:)
Respostas:
Parece que a TV nVidia Shield para Android vem com o Android 5.1.1 e uma atualização do Marshmallow está disponível apenas desde dezembro. Estou assumindo que o Android 5.1.1 é a versão instalada no seu dispositivo.
Serviços do sistema de consulta
Ative o adb no modo sem fio no dispositivo. Siga o guia oficial ou esta resposta de Izzy para obter instruções, se necessário.
Você pode encontrar o status do Android - em suspensão ou em vigília - no despejo de vários serviços do sistema.
Serviço: Poder
Pesquise as strings
mWakefulness
e / ouDisplay Power: state
. Ambos dariam o status que você precisa.Exemplo:
me dá
Serviço: Janela
Pesquise as strings
mAwake=true
e / oumScreenOnEarly=true
e / oumScreenOnFully=true
Exemplo:
me dá
Serviço: Display
Pesquise as strings
mState=OFF
e / oumScreenState=OFF
.Exemplo:
me dá
Usar automação
Se nenhum dos serviços do sistema mencionados no método anterior funcionou para você, configure um aplicativo de automação , como Tasker, MacroDroid ou Automate.
Agora, usaríamos a automação para gravar o status do Android em um arquivo, como Dormir no modo de suspensão e Despertar quando estiver acordado.
Tasker ,
MacroDroid
Infelizmente, o Android não vem com
echo
ouprintf
utilitário. Se o dispositivo estiver enraizado, você poderá instalar o busybox e ficar em paz. Caso contrário, baixe o binário do busybox , defina as permissões executáveis e empurre-o para/data/local/tmp
usoadb push
. Outra maneira de um dispositivo não-rooteado é manter três arquivos, um para state, um com o texto Sleeping e o último com o texto Awake. Sempre que a tela ligar / desligar, copie o segundo / terceiro arquivo para o primeiro.O MacriDroid também requer um plug-in, como Configurações seguras, para executar comandos.
Ação: Configurações seguras → Ações → Executar comando:
echo Sleeping > FILE_PATH
Ação: Configurações seguras → Ações → Executar comando:
echo Awake > FILE_PATH
Para um Android sem raiz,
echo
deve ser substituído por./data/local/tmp/busybox echo
. Caso contrário, faça uma operação de cópia usando o comandocp SOURCE DESTINATION
.Automatizar
Seu fluxo deve parecer mais ou menos com esta imagem
(Clique na imagem para ampliar)
Você precisa criar dois fluxos, um para dormir e outro para acordar. O segundo bloco no fluxo é chamado de recebimento de transmissão e pode ser encontrado em Aplicativos. O terceiro bloco é denominado Arquivo de gravação de texto e pode ser encontrado em Arquivo e armazenamento.
Agora você pode verificar o conteúdo desse arquivo usando adb no modo sem fio ou usando SSH (requer um servidor SSH no Android; execute o servidor em todas as interfaces e não o vincule a uma única interface.)
Há outra possibilidade, como fazer com que o aplicativo de automação carregue o arquivo em um servidor local ou remoto para que você possa consultar o servidor em vez do Android para saber o status.
fonte
Na verdade, essa não é uma solução, mas nas configurações do dispositivo provavelmente existe uma opção que desativa o Wi-Fi quando o dispositivo entra no modo ocioso. Mesmo se não houver essa opção, tenho certeza de que deve haver um aplicativo para isso. Portanto, se o Wi-Fi estiver desativado no estado IDLE, a abordagem "ping" funcionará, mas você precisará lidar com atualizações em segundo plano que não funcionam e assim por diante quando o dispositivo entrar no estado IDLE.
Não acho que exista um aplicativo padrão para esta solução, mas talvez outro ponto o ajude. Você pode criar seu próprio aplicativo Android que ouve o PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED
Intent
e, ao receber algum tipo de solicitação do servidor, pode enviar de volta se o dispositivo estiver ativado ou não. No entanto, observe que, quando o dispositivo recebe uma solicitação do servidor, ele provavelmente fica ativado.fonte
Você pode configurar um script de shell para saber se o dispositivo está no modo ocioso .. se o dispositivo estiver ocioso .. então você pode
enviar um sinal para o dispositivo. Por exemplo, você pode usar o comando adb shell como abaixo: adb shell dumpsys deviceidle
fonte
dumpsys deviceidle
realmente não funciona no meu telefone, pelo menos (dáCan't find service: deviceidle
).