Come forzare il rilevamento di hotword "OK Google" a funzionare quando lo schermo è spento su qualsiasi dispositivo [Root]

Questo è un tutorial su come forzare qualsiasi dispositivo rooted ad abilitare il rilevamento hotword OK di Google, anche se il suo hardware non supporta questa funzione!

Quando il Moto X (2013) fu annunciato per la prima volta, una delle caratteristiche più interessanti (oltre all'Ambient Display) era la sua capacità di svegliarsi con i comandi vocali.

Successivamente introdotta nei dispositivi Google Nexus e ora disponibile in molti flagship, la funzionalità di riconoscimento hotword è a funzionalità davvero fantastica per quando devi effettuare una rapida ricerca su Google senza armeggiare con il dispositivo nel tuo mani. Ciò può essere eccezionalmente utile quando hai collegato il telefono all'auto e devi avviare la navigazione verso una determinata destinazione. È di gran lunga più sicuro utilizzare la tua voce per avviare la navigazione di Google Maps rispetto a qualsiasi altra alternativa.

Sfortunatamente, per poter attivare i comandi "OK Google" in ogni momento è necessario uno speciale chip di riconoscimento vocale a basso consumo nel dispositivo. Sebbene questo hardware sia presente in molti dispositivi, non è presente in tutti. Anche i flagship potenti e costosi come l'Huawei Mate 9 non offrono questa offerta. Per dispositivi come il mio, Google offre la possibilità di attivare i comandi vocali "OK Google" mentre lo schermo è acceso o quando il dispositivo è collegato a un caricabatterie.

Qualche anno fa, c'era un'applicazione con il nome di Apri Mic+ per Google Now che aveva la possibilità di abilitare un servizio in background per ascoltare i comandi vocali in ogni momento. Sfortunatamente, Google ha richiesto allo sviluppatore di interrompere l'utilizzo del servizio e lo sviluppatore non ha più avuto tempo per supportare l'app, quindi è caduta nel dimenticatoio. L'unica opzione esistente è utilizzare Voce automatica, un popolare plug-in Tasker, ma ciò richiede che tu abbia una conoscenza sufficiente di Tasker per impostare profili per rispondere a comandi specifici.

Per quelli di voi che preferiscono affidarsi al servizio di riconoscimento vocale di Google, ho trovato una soluzione alternativa abilita il rilevamento hotword "OK Google" su qualsiasi dispositivo rooted, anche se il suo hardware non lo supporta. Ci sono due avvertenze a questo trucco, di cui parleremo in dettaglio di seguito.


Rilevamento hotword "OK Google" su qualsiasi dispositivo

La domanda che mi sono posto pensando ad una soluzione alternativa a questo problema è stata:

Come posso ingannare il mio dispositivo per abilitare il servizio di riconoscimento hotword su mio comando?

Poiché il mio telefono attuale non supporta nativamente il rilevamento hotword mentre lo schermo è spento, le uniche condizioni per farlo funzionare sarebbero quando lo schermo del mio telefono è acceso o quando è in carica. Naturalmente, poiché il mio obiettivo è abilitare il rilevamento delle hotword in ogni momento (anche quando lo schermo è spento), avere lo schermo acceso vanificherebbe tale scopo. Anche dover lasciare il dispositivo collegato sarebbe inutile nel mio sforzo, ma se potessi? trucco il mio dispositivo soddisfa una di queste due condizioni?

Fortunatamente, con un po' di magia root e un uso intelligente dei comandi di debug, questo è assolutamente possibile! Utilizzando un comando della shell di debug pensato a scopo di test, sono in grado di farlo ingannare il mio dispositivo facendogli credere che si sta caricando anche se scollegato da qualsiasi fonte di alimentazione. Il comando che sfrutteremo per i nostri scopi è dumpsys battery, i cui parametri potete leggere in questo post sul blog di Roman Mazur.

Nota: questo trucco lo è completamente sicuro eseguire. Come affermato, questo comando inganna solo il tuo dispositivo facendogli credere che si sta caricando. NON si sta effettivamente caricando, anche se le applicazioni di monitoraggio della batteria dicono il contrario (questo perché a queste app verranno fornite informazioni errate).

Di particolare rilievo è il dumpsys battery set comando, che accetta i parametri per impostare se il dispositivo è attualmente caricato o meno tramite ricarica CA, USB o wireless. Ad esempio, se apriamo una shell root in Android e inseriamo il comando seguente, the il dispositivo penserà che venga caricato tramite alimentazione CA.

su
dumpsys battery set ac 1

Impostando questo comando (o il comando per la ricarica USB/wireless), ora sarai in grado di farlo attiva i comandi OK di Google mentre lo schermo è spento. Questo perché, a tutti gli effetti, il tuo dispositivo è "in carica", soddisfacendo i requisiti per l'attivazione del servizio di riconoscimento hotword di Google.

Poiché si tratta di un comando destinato al debug (destinato principalmente agli sviluppatori per testare la funzionalità in diverse condizioni della batteria), presenta alcuni inconvenienti se utilizzato in questo modo. Due inconvenienti, in particolare, di cui parleremo in seguito. Il primo inconveniente è piuttosto banale da aggirare, ma lo stesso non si può dire per il secondo inconveniente.

Svantaggio n. 1: indicatore della batteria congelata

Dopo aver inserito qualsiasi comando "dumpsys batteria set", il servizio BatteryManager di Android lo farà interrompere immediatamente la raccolta eventuali ulteriori dati sullo stato della batteria. Ciò significa che il livello della batteria, la temperatura, la corrente, la tensione e lo stato di salute non verranno più segnalati dal sistema Android. Saranno invece "congelati" nel tempo nel momento in cui hai inserito il comando.

Tuttavia, questi dati lo sono ancora in fase di raccolta da parte del sistema anche se è accessibile da qualsiasi applicazione. Se desideri ricevere un aggiornamento sul livello attuale della batteria, dovrai eseguire alcuni trucchi. Fortunatamente, i dati sono abbastanza facili da estrarre. Se hai Tasker o un'altra applicazione di automazione, tutto ciò che devi fare è creare una notifica che si aggiorna con un semplice tocco con il testo corrente memorizzato in /sys/class/power_supply/battery/capacity.

Nello screenshot qui sopra, l'indicatore della batteria (visibile quando abbasso la barra di stato) è bloccato al 70%, ma come puoi vedere nel terminale, il livello effettivo della batteria è al 69%. Sarebbe facile eseguire regolarmente il polling di questo file per pubblicare un livello accurato della batteria nella barra delle notifiche, ma esiste un modo ancora più semplice per aggirare questo inconveniente.

Affrontare questo particolare inconveniente è effettivamente incredibilmente banale. Se ci pensi, questo problema si presenta solo quando il comando è abilitato e quando lo schermo è acceso. Ma il fatto è che non è necessario che questo comando sia abilitato quando lo schermo è acceso, perché la funzionalità predefinita ti consente di accedere ai comandi "OK Google" quando lo schermo è acceso. Pertanto, tutto ciò che devi fare è semplicemente disabilitare questo comando quando lo schermo è acceso. Usare Tasker o un'altra app di automazione sarebbe probabilmente il modo più semplice. Basta eseguire questo comando per disabilitare il trucco:

dumpsys battery reset

E di seguito troverai la descrizione dei due profili Tasker che dovresti configurare per eseguire questo comando quando lo schermo è spento ma disabilitarlo quando lo schermo è acceso. In sostanza, creerai due contesti "Evento", uno dei quali è l'evento "Display spento" mentre l'altro è l'evento "Display sbloccato". L'attività per l'evento "Display off" conterrà una singola azione, Codice-->Esegui Shell con il comando dumpsys battery set ac 1. Anche l'attività per l'evento "Display sbloccato" conterrà una singola azione, Codice-->Esegui Shell con il comando dumpsys battery reset. Pertanto, Tasker eseguirà il comando per indurre il tuo dispositivo a pensare che si sta caricando mentre lo schermo è spento (profilo: Enable Rilevamento hotword) ed esegui il comando per disabilitare questo trucco quando il telefono è sbloccato (profilo: Disabilita rilevamento hotword).

[schede] [titolo della scheda ="Abilita rilevamento 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][titolo scheda="Disabilita rilevamento 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: ]

[/scheda]

[/schede]

Svantaggio n. 2: maggiore consumo della batteria

C'è una buona ragione per cui il rilevamento delle hotword richiede sempre un coprocessore personalizzato, perché altrimenti comporterebbe un ulteriore consumo della batteria da parte della CPU che deve rimanere attiva. Quando induci il tuo dispositivo a pensare che sia in carica, significa che il dispositivo mantiene il processore in funzione e esegue più background servizi perché si parte dal presupposto che l'aumento dell'assorbimento di potenza non avrà importanza poiché il dispositivo ha accesso a una fonte di alimentazione.

Ma non è questo il caso, quindi abilitare questo comando comporterà un maggiore consumo della batteria. Nella mia esperienza lasciando il mio dispositivo in questo stato durante la notte, il mio Mate 9 si è scaricato Batteria al 12% nel corso di 8 ore.

Secondo me non è certo un problema, ma questo potrebbe scoraggiare alcuni di voi là fuori. Sfortunatamente, non esiste una soluzione semplice per affrontare questo secondo inconveniente. Disabilitare il comando mentre lo schermo è acceso, come indicato nell'ultimo paragrafo menzionato nella sezione precedente, aiuterà a mitigare in parte il problema, ma questo è tutto ciò che puoi fare.


Conclusione

Spero che troverai utile questo trucco. Certamente non è per tutti, ma se hai mai desiderato forzare il rilevamento delle hotword OK di Google e il tuo dispositivo non dispone dell'hardware necessario, questa soluzione alternativa fa al caso tuo.

Ho delineato i due potenziali inconvenienti di questo trucco, il primo dei quali può essere risolto utilizzando un'applicazione di automazione per abilitare/disabilitare il comando quando ha senso farlo. Quest'ultimo inconveniente è purtroppo dovuto al fatto che l'hardware non è progettato per essere sempre attivo rilevamento hotword, ma se lo usi solo quando ne hai veramente bisogno, non dovrebbe essere troppo complicato problema.

Prova questo trucco e facci sapere nei commenti qui sotto se funziona per te!