Голос с кнопки микрофона на проекторе Hisense / Vidda.
Сказали — открылось. Без облака приложений и без Google TV.
VoiceKey — приложение для Android TV-прошивок Hisense (проверено на Vidda C2 Ultra, VIDAA на Android 11). Оно забирает кнопку микрофона на пульте и делает с ней то, чего не умеет штатный ассистент.
- Голосовые команды. Нажали кнопку и сказали: «открой Лампу», «найди на ютубе трейлер Дюны», «найди в кинопоиске Интерстеллар» или просто название. Работает с TizenTube, Lampa, Кинопоиском, VK Видео, Rutube.
- Поиск внутри открытого приложения. Удержание кнопки — поиск там, где вы сейчас.
- Два распознавателя. Онлайн (Google) или офлайн (Vosk, русская модель ~46 МБ, скачивается один раз).
- «Продолжить просмотр». Недосмотренные в TizenTube и Lampa видео попадают в ряд лаунчера.
- Экранный переводчик. Китайские и английские надписи в системных настройках прошивки показываются по-русски поверх экрана (словари — в docs/translator.md).
- Возвращается после сна. Прошивка при засыпании убивает почти все приложения вместе со службой доступности; VoiceKey сам включает её обратно.
- Обновляется само. Раз в полдня проверяет новые версии на GitHub; когда выйдет новая, скажет надписью сверху, а установить — в настройках, «Обновление» (система спросит подтверждение).
- Настройки на экране. Что делает нажатие и удержание, время удержания, движок распознавания, звуки, переводчик.
-
Скачайте
VoiceKey.apkсо страницы Releases (или соберите сами, см. ниже) и поставьте на проектор любым способом: с флешки через файловый менеджер, по сети, черезadb install. -
Включите на проекторе в настройках разработчика «USB debugging» и «Wi-Fi debugging» (раздел «Отладка»). Если прошивка прячет настройки, откройте их через файловый менеджер: системное приложение Settings → «открыть в системе».
-
Откройте VoiceKey из лаунчера. Вверху списка появятся шаги «Настройка: …» — они показываются, пока не сделаны, и пропадают сами. Нажмите OK на «Настройка: выдать права»: на экране появится запрос «Allow USB debugging?» — отметьте «Always allow» и нажмите Allow. VoiceKey сам выдаст себе микрофон, обновления, подписку на уведомления и
WRITE_SECURE_SETTINGS, а потом включит свою службу. Компьютер не нужен. Отладку после этого можно выключить. -
Если так не вышло, одна команда с компьютера в той же сети закрывает то же самое:
adb connect <адрес-проектора>:5555 adb shell pm grant dev.xdark.voicekey android.permission.WRITE_SECURE_SETTINGS
Откройте VoiceKey ещё раз — остальные шаги закроются.
-
Для онлайн-распознавания нужен голосовой сервис
org.vidda.googlevoicesearch(Vidda-Voice-Service, сборка xxivanoi с 4pda). Если его нет, вверху настроек появится шаг «Настройка: голосовой сервис Google»: OK скачает его из релиза voice-service (контрольная сумма проверяется), на экране системы нажмите «Установить», микрофон сервису VoiceKey выдаст сам. Без сервиса панель микрофона сама переходит на офлайн-модель (если скачана) или подсказывает, что делать, и не виснет на «Подключаюсь…»; можно и сразу выбрать офлайн-движок.
Что даёт каждое разрешение:
| Шаг | Зачем | Без отладки |
|---|---|---|
| Микрофон | распознавателю речи нужно разрешение вызывающего | да, диалог |
| Обновления из приложения | установка новой версии | да, диалог прошивки |
| Служба кнопки микрофона | перехват кнопки | только если в прошивке есть экран специальных возможностей |
| Возврат после сна | прошивка при засыпании убивает службу; по подписке система запускает VoiceKey снова | только если есть экран доступа к уведомлениям |
WRITE_SECURE_SETTINGS |
включает два предыдущих шага сам, в том числе после сна | нет: через «Настройка: выдать права» или adb |
Язык системы. В настройках VoiceKey есть строка «Язык системы»: она показывает текущий язык, а OK или стрелки переключают русский / English (меняется persist.sys.locale, нужна перезагрузка проектора). Значение читается обратно, и строка честно пишет, что получилось; если setprop не принялся, VoiceKey пробует второй способ — просит систему сменить язык так, как это делают приложения-переключатели языка. Если прошивка при загрузке возвращает свой язык, VoiceKey после включения проектора сам ставит выбранный заново. В самом низу настроек есть скрытый раздел «Отладка» (открывается по OK): состояние языка, две пробы и журнал — чтобы разобраться, что делает прошивка. Работает при включённой отладке, как и «Настройка: выдать права». Пригодится там, где в прошивке нет русского: приложения со своими русскими строками (например, Lumbina) заговорят по-русски.
Проверка: adb shell am start -n dev.xdark.voicekey/.TestPhrase --es phrase 'открой лампу' — выполнит фразу так, будто её сказали.
Из приложения: настройки VoiceKey → «Обновление» → OK. Приложение скачает VoiceKey.apk из последнего релиза, сверит контрольную сумму и передаст установщику; на экране системы нужно нажать «Установить». Тихо обновиться Android 11 не даёт. Обновление принимается только если подписано тем же ключом, что и установленное приложение.
Вручную: adb install -r VoiceKey.apk.
- Нажатие на кнопку микрофона — сказать команду.
- Удержание — голосовой поиск в приложении на экране (или панель Google, если приложение не умеет).
- Что делает каждое из двух и сколько держать — в настройках VoiceKey (сам значок в лаунчере).
- Приложения называйте как угодно: «ютуб», «лампа», «кинопоиск», «вк видео», «рутуб».
- Журнал работы:
adb shell dumpsys activity service dev.xdark.voicekey/.KeyService(и/.WakeListener, если служба не работает). - Служба не включилась после сна: запустите значок VoiceKey из лаунчера — он включит её вручную и скажет, как прошло.
- Любое нажатие на пульте «прожимается» несколько раз после выхода из сна. Замечено на Vidda C2 Ultra вместе с лаунчером Lumbina 0.0.6: помогает выключить его «службу пульта» в специальных возможностях. К VoiceKey это не относится (проверено сырыми событиями
getevent: аппаратно кнопка срабатывает один раз).
Без Gradle: aapt2 → javac → d8 → zipalign → apksigner.
Нужны JDK 17+ (путь в JAVA_HOME, по умолчанию ~/.local/opt/jdk), Android SDK с build-tools 35.0.0 и platform android-30 (ANDROID_HOME, по умолчанию ~/.local/opt/android-sdk), curl, zip.
tools/fetch-libs.sh # Vosk и JNA с Maven Central, с проверкой контрольных сумм
./build.sh # получится VoiceKey.apkКлюч подписи voicekey.keystore создаётся при первой сборке рядом с проектом. Храните его: обновления должны быть подписаны тем же ключом. Приложение собирается под arm64.
Исходники в src/dev/xdark/voicekey, у каждого класса есть описание в начале файла. Ключевые: KeyService (перехват кнопки), RemoteMic (звук с микрофона пульта), Command (разбор фразы), VoiceActivity (распознавание), WakeListener/BootReceiver (возврат после сна), Translator (экранный переводчик), WatchNext (продолжить просмотр).
GPL-3.0-or-later. Сторонние компоненты — в NOTICE.md.





