Sådan tvinges 'OK Google' hotword-detektion til at fungere, når skærmen er slukket på enhver enhed [Root]

Dette er en vejledning i, hvordan man tvinger enhver rodfæstet enhed til at aktivere OK Google hotword-genkendelse, selvom dens hardware ikke understøtter funktionen!

Da Moto X (2013) først blev annonceret, var en af ​​de mest spændende funktioner (udover Ambient Display) dens evne til at vågne op til stemmekommandoer.

Senere introduceret i Google Nexus-enheder og nu tilgængelig i mange flagskibe, er kommandoordsgenkendelse en ret fantastisk funktion, når du skal lave en hurtig Google-søgning uden at fumle med enheden i din hænder. Dette kan være usædvanligt nyttigt, når du har sat din telefon i din bil, og du skal starte navigation til en bestemt destination. Det er langt sikrere at bruge din stemme til at starte Google Maps-navigation end noget andet alternativ.

Desværre kræver det at kunne udløse "OK Google"-kommandoer til enhver tid en speciel, laveffekt stemmegenkendelseschip i din enhed. Selvom denne hardware er til stede i mange enheder, er den ikke til stede i dem alle. Selv kraftfulde, dyre flagskibe som Huawei Mate 9 tilbyder ikke dette tilbud. For enheder som min tilbyder Google muligheden for at udløse "OK Google" stemmekommandoer, mens skærmen er tændt, eller når enheden er sluttet til en oplader.

For nogle år tilbage var der en ansøgning ved navn Åbn Mic+ for Google Now som havde mulighed for at aktivere en baggrundstjeneste til at lytte efter stemmekommandoer til enhver tid. Desværre anmodede Google om, at udvikleren stoppede med at bruge tjenesten, og udvikleren havde ikke længere tid til at understøtte den app, så den faldt af vejen. Den eneste eksisterende mulighed er at bruge AutoVoice, et populært Tasker-plugin, men dette kræver, at du har nok Tasker-viden til at oprette profiler til at reagere på specifikke kommandoer.

For dem af jer, der foretrækker at stole på Googles stemmegenkendelsestjeneste, har jeg fundet en løsning, der aktiverer "OK ​​Google" hotword-detektion på enhver rodfæstet enhed, selvom dens hardware ikke understøtter det. Der er to forbehold til dette trick, som vi vil diskutere i detaljer nedenfor.


"OK Google" Hotword-genkendelse på enhver enhed

Spørgsmålet, jeg stillede mig selv, da jeg tænkte på en løsning på dette problem, var:

Hvordan kan jeg narre min enhed til at aktivere kommandoordsgenkendelsestjenesten på min kommando?

Da min nuværende telefon ikke naturligt understøtter genkendelse af hotword, mens skærmen er slukket, er de eneste betingelser for at få dette til at fungere, når min telefons skærm er tændt, eller når den oplader. Da mit mål er at aktivere hotword-genkendelse på alle tidspunkter (selv mens skærmen er slukket), ville det naturligvis besejre dette formål at have skærmen tændt. At skulle lade min enhed være tilsluttet ville også være meningsløst i min bestræbelse, men hvad nu hvis jeg kunne trick min enhed til at opfylde en af ​​disse to betingelser?

Heldigvis, med en smule root-magi og en smart brug af fejlretningskommandoer, er dette meget muligt! Jeg er i stand til at bruge en debug shell-kommando beregnet til testformål narre min enhed til at tro, at den oplader selvom den er koblet fra enhver strømkilde. Kommandoen vi vil udnytte til vores formål er dumpsys battery, hvis parametre du kan læse om i dette blogindlæg af Roman Mazur.

Bemærk: dette trick er helt sikkert at optræde. Som det er nævnt, TRICKER denne kommando kun din enhed til at tro, at den oplader. Det oplader faktisk IKKE, selvom batteriovervågningsapplikationer siger noget andet (dette er fordi disse apps vil blive fodret med forkerte oplysninger).

Særligt bemærkelsesværdigt er dumpsys battery set kommando, som accepterer parametre for at indstille, om enheden i øjeblikket oplades via AC, USB eller trådløs opladning. For eksempel, hvis vi åbner en rodskal i Android og indtaster følgende kommando, den enheden vil tro, at den oplades via vekselstrøm.

su
dumpsys battery set ac 1

Ved at indstille denne kommando (eller kommandoen til USB/trådløs opladning), vil du nu kunne udløs OK Google-kommandoer, mens din skærm er slukket. Dette skyldes, at din enhed for alt i verden "oplader" - opfylder kravene for at Googles genkendelsestjeneste for hotword kan aktiveres.

Da dette er en kommando beregnet til fejlretning (hovedsageligt beregnet til udviklere til at teste funktionalitet under forskellige batteriforhold), har den nogle ulemper, når den bruges på denne måde. Især to ulemper, som vi vil tage fat på næste gang. Den første ulempe er ret triviel at omgås, men det samme kan ikke siges om den anden ulempe.

Ulempe #1 - Frossen batteriindikator

Efter at have indtastet en "dumpsys battery set"-kommando, vil Androids BatteryManager-tjeneste straks stoppe med at indsamle eventuelle yderligere data om din batteritilstand. Det betyder, at dit batteriniveau, temperatur, strøm, spænding, helbred ikke længere vil blive rapporteret af Android-systemet. De vil i stedet blive "frosset" i tide i det øjeblik du indtastede kommandoen.

Disse data er dog stadig indsamles af systemet selvom det er tilgængeligt af enhver applikation. Hvis du vil have en opdatering på, hvad dit nuværende batteriniveau er på, bliver du nødt til at lave nogle tricks. Heldigvis er dataene ret nemme at trække. Hvis du har Tasker eller en anden automatiseringsapplikation, skal du blot oprette en notifikation, der opdateres på et tryk med den aktuelle tekst gemt i /sys/class/power_supply/battery/capacity.

I ovenstående skærmbillede sidder min batteriindikator (som er synlig, når jeg trækker statuslinjen ned) fast på 70%, men som du kan se i terminalen, er mit faktiske batteriniveau 69%. Det ville være nemt regelmæssigt at polle denne fil for at sende et nøjagtigt batteriniveau i min meddelelseslinje, men der er en endnu nemmere måde at omgå dette tilbageslag på.

Håndtering af denne særlige ulempe er faktisk utrolig trivielt. Hvis du tænker over det, opstår dette problem kun, når kommandoen er aktiveret, og når skærmen er tændt. Men sagen er, at du ikke behøver at have denne kommando aktiveret, når skærmen er tændt, fordi standardfunktionaliteten giver dig adgang til "OK Google"-kommandoer, når skærmen er tændt. Alt du skal gøre er således ganske enkelt deaktiver denne kommando, når skærmen er tændt. Brug af Tasker eller en anden automatiseringsapp ville sandsynligvis være den enkleste måde. Kør blot denne kommando for at deaktivere tricket:

dumpsys battery reset

Og nedenfor finder du beskrivelsen af ​​de to Tasker-profiler, du skal konfigurere for at køre denne kommando, når skærmen er slukket, men deaktiver den, når skærmen er tændt. I bund og grund vil du oprette to "Begivenheds"-kontekster, hvoraf den ene er begivenheden "Vis fra", mens den anden er begivenheden "Vis oplåst". Opgaven for hændelsen "Vis fra" vil have en enkelt handling i sig, Kode--> Kør Shell med kommandoen dumpsys battery set ac 1. Opgaven for begivenheden "Vis oplåst" vil også have en enkelt handling i sig, Kode--> Kør Shell med kommandoen dumpsys battery reset. Således vil Tasker køre kommandoen for at narre din enhed til at tro, at den oplader, mens skærmen er slukket (profil: Aktiver Hotword Detection) og kør kommandoen for at deaktivere dette trick, når telefonen er låst op (profil: Disable Hotword Detection).

[tabs][tab title ="Aktiver hotword-genkendelse"]

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 ="Deaktiver genkendelse af 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: ]

[/tab]

[/tabs]

Ulempe #2 - Øget batteridræning

Der er en god grund til, at hotword-detektering til enhver tid kræver en brugerdefineret co-processor, det er fordi det ellers ville resultere i, at ekstra batteridræning fra CPU'en skulle holde sig vågen. Når du narre din enhed til at tro, at den oplader, betyder det, at enheden holder processoren kørende og kører mere baggrund tjenester, fordi det er under den antagelse, at det øgede strømforbrug ikke betyder noget, fordi enheden har adgang til en strømkilde.

Men det er ikke tilfældet her, så aktivering af denne kommando vil resultere i øget batteridræning. Min erfaring med at efterlade min enhed i denne tilstand natten over, drænede min Mate 9 12 % batteri i løbet af 8 timer.

Næppe en deal-breaker efter min mening, men dette kan afskrække nogle af jer derude. Desværre er der ingen nem løsning til at håndtere denne anden ulempe. Deaktivering af kommandoen, mens skærmen er tændt, som i det sidste afsnit nævnt i afsnittet ovenfor, vil hjælpe med at afhjælpe problemet, men det er omtrent alt, hvad du kan gøre.


Konklusion

Jeg håber, du finder dette trick nyttigt. Det er bestemt ikke for alle, men hvis du nogensinde har ønsket at tvinge OK Google hotword-genkendelse til at fungere, og din enhed ikke har den nødvendige hardware, er denne løsning for dig.

Jeg har skitseret de to potentielle ulemper ved dette trick, hvoraf den første kan løses ved at bruge en automatiseringsapplikation til at aktivere/deaktivere kommandoen, når det giver mening at gøre det. Sidstnævnte ulempe er desværre et resultat af, at din hardware ikke er bygget til altid at være tændt hotword detektion, men hvis du kun bruger dette, når du virkelig har brug for det, så burde det ikke være for meget problem.

Giv dette trick et skud, og lad os vide i kommentarerne nedenfor, hvis det virker for dig!