Як змусити функцію виявлення гарячих слів «OK Google» працювати, коли екран вимкнено на будь-якому пристрої [Root]

Це підручник про те, як змусити будь-який рутований пристрій увімкнути виявлення гарячого слова OK Google, навіть якщо його апаратне забезпечення не підтримує цю функцію!

Коли Moto X (2013) було вперше оголошено, однією з найцікавіших функцій (крім Ambient Display) була його здатність прокидатися за допомогою голосових команд.

Пізніше представлена ​​в пристроях Google Nexus і тепер доступна в багатьох флагманах, можливість розпізнавання гарячих слів є дуже чудова функція, коли вам потрібно швидко здійснити пошук у Google, не перебираючи пристрій у своєму пристрої руками. Це може бути надзвичайно корисним, коли ви поставили телефон у док-станцію автомобіля й вам потрібно розпочати навігацію до певного пункту призначення. Набагато безпечніше використовувати голос для запуску навігації на Картах Google, ніж будь-яку іншу альтернативу.

На жаль, для того, щоб завжди запускати команди «OK Google», потрібен спеціальний чіп розпізнавання голосу з низьким енергоспоживанням у вашому пристрої. Хоча це обладнання присутнє в багатьох пристроях, воно присутнє не у всіх. Навіть потужні, дорогі флагмани, такі як Huawei Mate 9, не пропонують такої пропозиції. Для таких пристроїв, як мій, Google пропонує можливість запускати голосові команди «OK Google», коли екран увімкнено або коли пристрій підключено до зарядного пристрою.

Кілька років тому з'явився додаток на ім'я Відкрийте Mic+ для Google Now який мав можливість увімкнути фонову службу для постійного прослуховування голосових команд. На жаль, Google попросив розробника припинити використання служби, і у розробника більше не було часу підтримувати цю програму, тому вона відпала на другий план. Єдиний існуючий варіант - використовувати AutoVoice, популярний плагін Tasker, але для цього потрібно мати достатньо знань Tasker, щоб налаштувати профілі для відповіді на певні команди.

Для тих із вас, хто воліє покладатися на службу розпізнавання голосу Google, я знайшов обхідний шлях, який вмикає виявлення гарячого слова «OK Google» на будь-якому рутованому пристрої, навіть якщо його апаратне забезпечення цього не підтримує. Є два застереження до цього трюку, який ми детально обговоримо нижче.


Виявлення гарячого слова "OK Google" на будь-якому пристрої

Питання, яке я поставив собі, коли думав про вирішення цієї проблеми, було таке:

Як я можу обманом змусити свій пристрій увімкнути службу розпізнавання гарячих слів за моєю командою?

Оскільки мій поточний телефон спочатку не підтримує виявлення гарячого слова, коли екран вимкнено, єдиною умовою, щоб це працювало, було б, коли екран мого телефону увімкнено або коли він заряджається. Природно, оскільки моя ціль полягає в тому, щоб увімкнути виявлення гарячих слів у будь-який час (навіть коли екран вимкнено), увімкнення екрана завадить цій меті. Залишати свій пристрій увімкненим також було б безглуздим у моїх зусиллях, але що, якби я міг трюк щоб мій пристрій відповідав одній із цих двох умов?

На щастя, з трохи кореневої магії та розумним використанням команд налагодження це цілком можливо! Використовуючи команду debug shell, призначену для тестування, я можу це зробити змусити мій пристрій подумати, що він заряджається навіть якщо він відключений від джерела живлення. Команда, яку ми будемо використовувати для наших цілей dumpsys battery, про параметри якого ви можете прочитати в цей допис у блозі Романа Мазура.

Примітка: цей трюк є абсолютно безпечний виконувати. Як зазначено, ця команда лише ОБДУРЮЄ ваш пристрій, щоб він подумав, що він заряджається. Насправді він НЕ заряджається, навіть якщо програми моніторингу батареї кажуть інакше (це тому, що ці програми отримуватимуть неправильну інформацію).

Особливої ​​уваги заслуговує dumpsys battery set команда, яка приймає параметри, щоб установити, чи заряджається пристрій наразі через змінний струм, USB або бездротову зарядку. Наприклад, якщо ми відкриємо кореневу оболонку в Android і введемо таку команду, то пристрій думатиме, що він заряджається через джерело змінного струму.

su
dumpsys battery set ac 1

Установивши цю команду (або команду для USB/бездротової зарядки), ви тепер зможете запускати команди OK Google, коли екран вимкнено. Це пов’язано з тим, що фактично ваш пристрій «заряджається» — відповідає вимогам для активації служби розпізнавання гарячих слів Google.

Оскільки ця команда призначена для налагодження (в основному призначена для розробників для перевірки функціональності за різних умов заряду батареї), вона має деякі недоліки, якщо використовувати її таким чином. Зокрема два недоліки, про які ми розглянемо далі. Перший недолік досить тривіальний для вирішення, але цього не можна сказати про другий недолік.

Недолік №1 - Індикатор замерзлої батареї

Після введення будь-якої команди «dumpsys battery set» служба Android BatteryManager зробить це негайно припинити збір будь-які додаткові дані про стан акумулятора. Це означає, що система Android більше не повідомлятиме про рівень заряду батареї, температуру, струм, напругу, стан. Натомість вони будуть «заморожені» в часі на момент введення команди.

Проте ці дані є все ще збирається системою навіть якщо він доступний будь-якою програмою. Якщо ви хочете отримати оновлену інформацію про поточний рівень заряду батареї, вам доведеться вдатися до деяких хитрощів. На щастя, дані досить легко отримати. Якщо у вас є Tasker або інша програма автоматизації, все, що вам потрібно зробити, це створити сповіщення, яке оновлюється одним натисканням із поточним текстом, що зберігається в /sys/class/power_supply/battery/capacity.

На наведеному вище скріншоті мій індикатор заряду батареї (який видно, коли я опускаю рядок стану) застряг на 70%, але, як ви можете бачити в терміналі, мій фактичний рівень заряду батареї становить 69%. Було б легко регулярно опитувати цей файл, щоб опублікувати точний рівень заряду акумулятора на моїй панелі сповіщень, але є ще простіший спосіб вирішити цю проблему.

Боротьба з цим конкретним недоліком насправді неймовірно тривіально. Якщо ви подумаєте про це, ця проблема виникає лише тоді, коли команду ввімкнено та коли екран увімкнено. Але справа в тому, що вам не потрібно вмикати цю команду, коли екран увімкнено, тому що за замовчуванням функціональність дозволяє вам отримати доступ до команд «OK Google», коли екран увімкнено. Таким чином, все, що вам потрібно зробити, це просто вимкніть цю команду, коли екран увімкнено. Найпростішим способом було б використання Tasker або іншої програми автоматизації. Просто запустіть цю команду, щоб вимкнути трюк:

dumpsys battery reset

А нижче ви знайдете опис двох профілів Tasker, які вам потрібно буде налаштувати, щоб запустити цю команду, коли екран вимкнено, але вимкнути її, коли екран увімкнено. По суті, ви створюватимете два контексти «Події», одна з яких — це подія «Дисплей вимкнено», а інша — подія «Дисплей розблоковано». Завдання для події «Display Off» матиме одну дію, Code-->Run Shell з командою dumpsys battery set ac 1. Завдання для події «Дисплей розблоковано» також матиме одну дію, Код-->Запустити оболонку за допомогою команди dumpsys battery reset. Таким чином, Tasker запустить команду, щоб змусити ваш пристрій думати, що він заряджається, коли екран вимкнено (профіль: Увімкнути Hotword Detection) і запустіть команду, щоб вимкнути цей трюк, коли телефон розблоковано (профіль: Disable Hotword Detection).

[tabs][tab title ="Увімкнути виявлення гарячих слів"]

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][заголовок вкладки ="Вимкнути виявлення гарячих слів"]

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]

Недолік №2 - Збільшений розряд батареї

Існує вагома причина, чому для постійного виявлення гарячих слів потрібен спеціальний співпроцесор, це тому, що в іншому випадку це призведе до додаткового розрядження батареї від процесора, який повинен залишатися неактивним. Якщо ви обманом змушуєте свій пристрій думати, що він заряджається, це означає, що пристрій підтримує роботу процесора та працює більше у фоновому режимі послуги, оскільки передбачається, що збільшення споживання енергії не матиме значення через те, що пристрій має доступ до джерела живлення.

Але тут це не так, тому ввімкнення цієї команди призведе до збільшення розрядження акумулятора. З мого досвіду, якщо залишити свій пристрій у такому стані на ніч, мій Mate 9 розрядився 12% заряд акумулятора протягом 8 годин.

На мою думку, це навряд чи порушить угоду, але це може стримати деяких із вас. На жаль, немає простого способу вирішення проблеми з цим другим недоліком. Вимкнення команди, коли екран увімкнено, як зазначено в останньому параграфі, згаданому в розділі вище, допоможе дещо пом’якшити проблему, але це майже все, що ви можете зробити.


Висновок

Сподіваюся, цей трюк буде для вас корисним. Це, звичайно, не для всіх, але якщо ви коли-небудь хотіли примусово ввімкнути функцію виявлення гарячого слова OK Google, а ваш пристрій не має необхідного апаратного забезпечення, цей обхідний шлях для вас.

Я окреслив два потенційні недоліки цього трюку, перший з яких можна вирішити за допомогою програми автоматизації, щоб увімкнути/вимкнути команду, коли це має сенс. Останній недолік, на жаль, є результатом того факту, що ваше обладнання не створено для постійного виявлення гарячих слів, але якщо ви використовуєте це лише тоді, коли це дійсно потрібно, то це не повинно бути надто великим проблема.

Спробуйте цей трюк і повідомте нам у коментарях нижче, чи він працює для вас!