Este é um tutorial sobre como forçar qualquer dispositivo com acesso root a ativar a detecção de hotword OK Google, mesmo que seu hardware não suporte o recurso!
Quando o Moto X (2013) foi anunciado pela primeira vez, um dos recursos mais interessantes (além do Ambient Display) era a capacidade de despertar com comandos de voz.
Mais tarde introduzido em dispositivos Google Nexus e agora disponível em muitos carros-chefe, o recurso de reconhecimento de hotword é um recurso recurso bastante incrível para quando você precisa fazer uma pesquisa rápida no Google sem se atrapalhar com o dispositivo em seu mãos. Isso pode ser extremamente útil quando você coloca o telefone no carro e precisa iniciar a navegação para um determinado destino. É muito mais seguro usar sua voz para iniciar a navegação no Google Maps do que qualquer outra alternativa.
Infelizmente, ser capaz de acionar comandos “OK Google” a qualquer momento requer um chip especial de reconhecimento de voz de baixo consumo de energia em seu dispositivo. Embora esse hardware esteja presente em muitos dispositivos, não está presente em todos eles. Mesmo carros-chefe poderosos e caros como o Huawei Mate 9 não oferecem esta oferta. Para dispositivos como o meu, o Google oferece a capacidade de acionar comandos de voz “OK Google” enquanto a tela está ligada ou quando o dispositivo está conectado a um carregador.
Há alguns anos, havia um aplicativo com o nome de Abra o Mic + para Google Now que tinha a opção de ativar um serviço em segundo plano para ouvir comandos de voz o tempo todo. Infelizmente, o Google solicitou que o desenvolvedor parasse de usar o serviço e o desenvolvedor não teve mais tempo para oferecer suporte a esse aplicativo, então ele ficou no esquecimento. A única opção existente é usar AutoVoz, um plugin Tasker popular, mas isso requer que você tenha conhecimento suficiente do Tasker para configurar perfis para responder a comandos específicos.
Para aqueles que preferem confiar no serviço de reconhecimento de voz do Google, encontrei uma solução alternativa que ativa a detecção de hotword "OK Google" em qualquer dispositivo com acesso root, mesmo que seu hardware não seja compatível. Há duas advertências a este truque, que discutiremos em detalhes abaixo.
Detecção de hotword "OK Google" em qualquer dispositivo
A pergunta que me fiz ao pensar em uma solução alternativa para esse problema foi:
Como posso enganar meu dispositivo para ativar o serviço de reconhecimento de hotword sob meu comando?
Como meu telefone atual não oferece suporte nativo à detecção de hotword enquanto a tela está desligada, as únicas condições para que isso funcione seriam quando a tela do meu telefone estivesse ligada ou carregando. Naturalmente, como meu objetivo é ativar a detecção de hotwords em todos os momentos (mesmo quando a tela está desligada), manter a tela ligada anularia esse propósito. Ter que deixar meu dispositivo conectado também seria inútil em meu esforço, mas e se eu pudesse truque meu dispositivo atenda a uma dessas duas condições?
Felizmente, com um pouco de magia de root e um uso inteligente de comandos de depuração, isso é muito possível! Usando um comando debug shell destinado a fins de teste, posso enganar meu dispositivo fazendo-o pensar que está carregando mesmo que esteja desconectado de qualquer fonte de energia. O comando que exploraremos para nossos propósitos é dumpsys battery
, cujos parâmetros você pode ler em esta postagem do blog de Roman Mazur.
Nota: este truque é completamente seguro atuar. Como foi dito, este comando apenas engana seu dispositivo fazendo-o pensar que está carregando. Na verdade, ele NÃO está carregando, mesmo que os aplicativos de monitoramento da bateria digam o contrário (isso ocorre porque esses aplicativos receberão informações incorretas).
De particular interesse é o dumpsys battery set
comando, que aceita parâmetros para definir se o dispositivo está ou não sendo carregado via CA, USB ou carregamento sem fio. Por exemplo, se abrirmos um shell root no Android e digitarmos o seguinte comando, o o dispositivo pensará que está sendo carregado via alimentação CA.
su
dumpsys battery set ac 1
Ao definir este comando (ou o comando para carregamento USB/sem fio), agora você poderá acione comandos OK do Google enquanto a tela estiver desligada. Isso ocorre porque, para todos os efeitos, seu dispositivo está “carregando” – atendendo aos requisitos para ativação do serviço de reconhecimento de hotword do Google.
Como este é um comando destinado à depuração (destinado principalmente a desenvolvedores para testar a funcionalidade sob diferentes condições de bateria), ele apresenta algumas desvantagens quando usado dessa maneira. Duas desvantagens, em particular, que abordaremos a seguir. A primeira desvantagem é bastante trivial de ser contornada, mas o mesmo não pode ser dito da segunda desvantagem.
Desvantagem #1 – Indicador de Bateria Congelada
Depois de inserir qualquer comando "dumpsys battery set", o serviço BatteryManager do Android irá pare imediatamente de coletar quaisquer dados adicionais sobre o estado da bateria. Isso significa que o nível da bateria, temperatura, corrente, voltagem e saúde não serão mais relatados pelo sistema Android. Em vez disso, eles ficarão "congelados" no momento em que você digitou o comando.
No entanto, este dado é ainda sendo coletado pelo sistema mesmo que seja acessível por qualquer aplicativo. Se quiser obter uma atualização sobre o nível atual da bateria, você precisará fazer alguns truques. Felizmente, os dados são bastante fáceis de extrair. Se você possui o Tasker ou outro aplicativo de automação, tudo o que você precisa fazer é criar uma notificação que seja atualizada em um toque com o texto atual armazenado em /sys/class/power_supply/battery/capacity.
Na captura de tela acima, meu indicador de bateria (que fica visível quando puxo a barra de status) está travado em 70%, mas como você pode ver no terminal, meu nível real de bateria é de 69%. Seria fácil pesquisar regularmente esse arquivo para postar um nível preciso de bateria na minha barra de notificação, mas há uma maneira ainda mais fácil de contornar esse contratempo.
Lidar com esta desvantagem específica é na verdade, incrivelmente trivial. Se você pensar bem, esse problema só se apresenta quando o comando está habilitado e quando a tela está ligada. Mas o problema é que você não precisa ter esse comando ativado quando a tela está ligada, porque a funcionalidade padrão permite acessar os comandos “OK Google” quando a tela está ligada. Assim, tudo que você precisa fazer é simplesmente desabilite este comando quando a tela estiver ligada. Usar o Tasker ou outro aplicativo de automação provavelmente seria a maneira mais simples. Basta executar este comando para desativar o truque:
dumpsys battery reset
E abaixo você encontrará a descrição dos dois perfis Tasker que você precisa configurar para executar este comando quando a tela estiver desligada, mas desativá-lo quando a tela estiver ligada. Em essência, você criará dois contextos de "Evento", um dos quais é o evento "Display Off", enquanto o outro é o evento "Display Unlocked". A tarefa para o evento "Display Off" terá uma única ação, Código -> Executar Shell com o comando dumpsys battery set ac 1
. A tarefa para o evento "Display Unlocked" também terá uma única ação, Código -> Executar Shell com o comando dumpsys battery reset
. Assim, Tasker executará o comando para fazer seu dispositivo pensar que está carregando enquanto a tela está desligada (perfil: Ativar Hotword Detection) e execute o comando para desabilitar este truque quando o telefone estiver desbloqueado (perfil: Disable Hotword Detection).
[tabs][tab title ="Ativar detecção de hotword"]
Profile: Enable Hotword Detection (180)
Event: Display Off
Enter: Anon (182)
A1: Run Shell [ Command: dumpsys battery set ac 1Timeout (Seconds):0Use Root:OnStoreOutputIn: StoreErrorsIn: StoreResultIn: ]
[/tab][tab title ="Desativar detecção de hotword"]
Profile: Disable Hotword Detection (191)
Event: Display Unlocked
Enter: Anon (192)
A1: Run Shell [ Command: dumpsys battery resetTimeout (Seconds):0Use Root:OnStoreOutputIn: StoreErrorsIn: StoreResultIn: ]
[/aba]
[/tabs]
Desvantagem nº 2 – Maior consumo de bateria
Há uma boa razão pela qual a detecção de hotword sempre requer um coprocessador personalizado; caso contrário, isso resultaria em consumo adicional de bateria da CPU, tendo que permanecer ativa. Quando você engana seu dispositivo fazendo-o pensar que está carregando, isso significa que o dispositivo mantém o processador funcionando e executa mais informações em segundo plano serviços porque pressupõe-se que o aumento do consumo de energia não importará devido ao dispositivo ter acesso a uma fonte de energia.
Mas esse não é o caso aqui, portanto, ativar este comando resultará em maior consumo de bateria. Na minha experiência, deixando meu dispositivo nesse estado durante a noite, meu Mate 9 esgotou 12% de bateria ao longo de 8 horas.
Na minha opinião, dificilmente é um obstáculo, mas isso pode dissuadir alguns de vocês. Infelizmente, não existe uma solução fácil para lidar com essa segunda desvantagem. Desativar o comando enquanto a tela estiver ligada, conforme o último parágrafo mencionado na seção acima, ajudará a atenuar um pouco o problema, mas isso é tudo que você pode fazer.
Conclusão
Espero que você ache este truque útil. Certamente não é para todos, mas se você sempre quis forçar o funcionamento da detecção de hotword OK do Google e seu dispositivo não possui o hardware necessário, esta solução alternativa é para você.
Descrevi as duas possíveis desvantagens desse truque, a primeira das quais pode ser resolvida usando um aplicativo de automação para ativar/desativar o comando quando fizer sentido fazê-lo. A última desvantagem infelizmente é o resultado do fato de que seu hardware não foi desenvolvido para estar sempre ligado. detecção de hotword, mas se você usar isso apenas quando realmente precisar, então não deve ser muito complicado. emitir.
Experimente este truque e deixe-nos saber nos comentários abaixo se funciona para você!