Hur man tvingar "OK ​​Google" Hotword Detection att fungera när skärmen är avstängd på någon enhet [Root]

click fraud protection

Det här är en handledning om hur man tvingar en rotad enhet att aktivera OK Google kommandoordsdetektering, även om dess hårdvara inte stöder funktionen!

När Moto X (2013) först tillkännagavs var en av de mest spännande funktionerna (förutom Ambient Display) dess förmåga att vakna till röstkommandon.

Senare introducerad i Google Nexus-enheter och nu tillgänglig i många flaggskepp, är kommandoordsigenkänning en ganska fantastisk funktion för när du behöver göra en snabb Google-sökning utan att fumla med enheten i din händer. Detta kan vara exceptionellt användbart när du har dockat din telefon i bilen och du behöver börja navigera till en viss destination. Det är mycket säkrare att använda din röst för att starta Google Maps-navigering än något annat alternativ.

För att kunna utlösa "OK Google"-kommandon hela tiden kräver tyvärr ett speciellt röstigenkänningschip med låg effekt i din enhet. Även om den här hårdvaran finns i många enheter, finns den inte i dem alla. Inte ens kraftfulla, dyra flaggskepp som Huawei Mate 9 erbjuder detta erbjudande. För enheter som min erbjuder Google möjligheten att utlösa "OK Google"-röstkommandon medan skärmen är på eller när enheten är ansluten till en laddare.

För några år sedan fanns en ansökan vid namn Öppna Mic+ för Google Nu som hade möjlighet att aktivera en bakgrundstjänst att lyssna efter röstkommandon hela tiden. Tyvärr begärde Google att utvecklaren skulle sluta använda tjänsten och utvecklaren hade inte längre tid att stödja den appen, så den föll i vägen. Det enda befintliga alternativet är att använda AutoVoice, ett populärt Tasker-plugin, men detta kräver att du har tillräckligt med Tasker-kunskap för att ställa in profiler för att svara på specifika kommandon.

För er som föredrar att lita på Googles röstigenkänningstjänst har jag hittat en lösning som aktiverar "OK ​​Google" kommandoordsdetektering på alla rotade enheter, även om dess hårdvara inte stöder det. Det finns två varningar till detta trick, som vi kommer att diskutera i detalj nedan.


"OK Google" Hotword Detektion på vilken enhet som helst

Frågan jag ställde mig själv när jag tänkte på en lösning på detta problem var:

Hur kan jag lura min enhet att aktivera kommandoordsigenkänningstjänsten på mitt kommando?

Eftersom min nuvarande telefon inte har inbyggt stöd för kommandoordsidentifiering när skärmen är avstängd, är de enda förutsättningarna för att få det att fungera när telefonens skärm är på eller när den laddas. Naturligtvis, eftersom mitt mål är att aktivera hotword-detektering vid alla tillfällen (även när skärmen är avstängd), skulle det motverka det syftet att ha skärmen påslagen. Att behöva lämna min enhet inkopplad skulle också vara meningslöst i min strävan, men tänk om jag kunde lura att min enhet uppfyller något av dessa två villkor?

Lyckligtvis, med lite rotmagi och en smart användning av felsökningskommandon är detta mycket möjligt! Jag kan använda ett debug-skalkommando avsett för teständamål lura min enhet att tro att den laddas även om den är urkopplad från någon strömkälla. Kommandot vi kommer att utnyttja för våra syften är dumpsys battery, vars parametrar du kan läsa om i detta blogginlägg av Roman Mazur.

Obs: detta trick är helt säker att prestera. Som sagt, detta kommando lurar bara din enhet att tro att den laddas. Den laddas faktiskt INTE, även om batteriövervakningsapplikationer säger något annat (detta beror på att dessa appar kommer att matas med felaktig information.)

Särskilt anmärkningsvärt är dumpsys battery set kommando, som accepterar parametrar för att ställa in om enheten för närvarande laddas via AC, USB eller trådlös laddning. Till exempel, om vi öppnar ett rotskal i Android och anger följande kommando, den enheten kommer att tro att den laddas via växelström.

su
dumpsys battery set ac 1

Genom att ställa in detta kommando (eller kommandot för USB/trådlös laddning) kommer du nu att kunna utlösa OK Google-kommandon medan skärmen är avstängd. Detta beror på att din enhet för alla ändamål "laddar" - uppfyller kraven för att Googles tjänst för kommandoordsigenkänning ska aktiveras.

Eftersom detta är ett kommando avsett för felsökning (främst avsett för utvecklare att testa funktionalitet under olika batteriförhållanden), har det vissa nackdelar när det används på detta sätt. Två nackdelar, i synnerhet, som vi kommer att ta upp härnäst. Den första nackdelen är ganska trivial att komma runt, men detsamma kan inte sägas om den andra nackdelen.

Nackdel #1 - Frozen Battery Indicator

Efter att ha angett ett "dumpsys battery set"-kommando kommer Androids BatteryManager-tjänst att göra det sluta genast samla in ytterligare data om ditt batteristatus. Detta innebär att din batterinivå, temperatur, ström, spänning, hälsa inte längre kommer att rapporteras av Android-systemet. De kommer istället att "frysas" i tid i det ögonblick du skrev in kommandot.

Men dessa uppgifter är fortfarande samlas in av systemet även om det är tillgängligt med vilken applikation som helst. Om du vill få en uppdatering om vad din nuvarande batterinivå ligger på, måste du göra några knep. Lyckligtvis är data ganska lätt att dra. Om du har Tasker eller ett annat automatiseringsprogram behöver du bara skapa ett meddelande som uppdateras på ett tryck med den aktuella texten lagrad i /sys/class/power_supply/battery/capacity.

I ovanstående skärmdump har min batteriindikator (som syns när jag drar ner statusfältet) fastnat på 70%, men som du kan se i terminalen är min faktiska batterinivå 69%. Det skulle vara lätt att regelbundet polla den här filen för att lägga upp en korrekt batterinivå i min meddelandefält, men det finns ett ännu enklare sätt att kringgå detta bakslag.

Att hantera denna speciella nackdel är faktiskt otroligt trivialt. Om du tänker på det, uppstår det här problemet bara när kommandot är aktiverat och när skärmen är på. Men grejen är att du inte behöver ha det här kommandot aktiverat när skärmen är på, eftersom standardfunktionaliteten låter dig komma åt "OK Google"-kommandon när skärmen är på. Allt du behöver göra är alltså helt enkelt inaktivera det här kommandot när skärmen är på. Att använda Tasker eller en annan automationsapp skulle förmodligen vara det enklaste sättet. Kör helt enkelt det här kommandot för att inaktivera tricket:

dumpsys battery reset

Och nedan hittar du beskrivningen av de två Tasker-profilerna du skulle behöva konfigurera för att köra det här kommandot när skärmen är avstängd men inaktivera den när skärmen är på. I huvudsak kommer du att skapa två "Event"-kontexter, varav den ena är "Display Off"-händelsen medan den andra är "Display Unlocked"-händelsen. Uppgiften för "Display Off"-händelsen kommer att ha en enda åtgärd i sig, Kod--> Kör Shell med kommandot dumpsys battery set ac 1. Uppgiften för händelsen "Visa upplåst" kommer också att ha en enda åtgärd i sig, Kod--> Kör Shell med kommandot dumpsys battery reset. Således kommer Tasker att köra kommandot för att lura din enhet att tro att den laddas medan skärmen är avstängd (profil: Aktivera Hotword Detection) och kör kommandot för att inaktivera detta trick när telefonen är upplåst (profil: Disable Hotword Detection).

[tabs][tab title ="Aktivera Hotword Detection"]

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 ="Inaktivera upptäckt av kommandoord"]

Profile: Disable Hotword Detection (191)
Event: Display Unlocked
Enter: Anon (192)
A1: Run Shell [ Command: dumpsys battery resetTimeout (Seconds):0Use Root:OnStoreOutputIn: StoreErrorsIn: StoreResultIn: ]

[/flik]

[/tabs]

Nackdel #2 - Ökad batteriförbrukning

Det finns en bra anledning till varför hotword-detektering hela tiden kräver en anpassad medprocessor, det är för att det annars skulle resultera i att ytterligare batteriladdning från CPU: n måste hålla sig vaken. När du lurar din enhet att tro att den laddas betyder det att enheten håller processorn igång och kör mer bakgrund tjänster eftersom det är under antagandet att det ökade strömförbrukningen inte spelar någon roll eftersom enheten har tillgång till en strömkälla.

Men det är inte fallet här, så att aktivera detta kommando kommer att resultera i ökad batteriförbrukning. Enligt min erfarenhet har min Mate 9 tömts av att lämna min enhet i detta tillstånd över natten 12 % batteri under 8 timmar.

Knappast en deal-breaker enligt min mening, men detta kan avskräcka några av er där ute. Tyvärr finns det ingen enkel lösning för att hantera denna andra nackdel. Att inaktivera kommandot medan skärmen är på, enligt det sista stycket som nämns i avsnittet ovan, hjälper till att mildra problemet, men det är ungefär allt du kan göra.


Slutsats

Jag hoppas att du tycker att det här tricket är användbart. Det är verkligen inte för alla, men om du någonsin har velat tvinga OK Google kommandoordsdetektering att fungera och din enhet inte har den nödvändiga hårdvaran, är den här lösningen för dig.

Jag har beskrivit de två potentiella nackdelarna med detta trick, varav den första kan lösas genom att använda en automatiseringsapplikation för att aktivera/inaktivera kommandot när det är vettigt att göra det. Den senare nackdelen är tyvärr ett resultat av att din hårdvara inte är byggd för att alltid vara på kommandoordsdetektering, men om du bara använder det här när du verkligen behöver det, borde det inte vara för mycket problem.

Ge det här tricket ett försök och låt oss veta i kommentarerna nedan om det fungerar för dig!