Как встроить голосового помощника в любое мобильное приложение. Разбираем на примере Habitica / Хабр
Вам не кажется, что многие мобильные приложения стали бы куда удобнее, будь в них голосовое управление? Нет, речь не о том, чтобы вести беседы с банковским ассистентом в чате техподдержки. В основном было бы достаточно голосовой навигации по приложению или form-filling в режиме диалога.
На примере Habitica (опенсорсный app для закрепления привычек и достижения целей, написан на Kotlin) Виталя Горбачёв, архитектор решений в Just AI, показывает, как быстро и бесшовно встроить голосовой интерфейс в функционал любого приложения.
Но для начала давайте обсудим, почему голосовое управление мобильным приложением — это удобно? Начнем с очевидных вещей.
- Нам часто нужно воспользоваться приложением в момент, когда заняты руки: готовка, управление транспортным средством, тащим чемоданы, во время механической работы и так далее.
- Голос — важнейший инструмент для людей с нарушениями зрения.
Кейсы и так прозрачные, но на самом деле всё еще проще: в некоторых случаях набор голосом просто быстрее! Представьте — заказ авиабилета одной фразой «Купи мне билет на завтра на двоих в Самару» вместо долгого заполнения формы. При этом с возможностью задавать пользователю уточняющие вопросы: вечером или днем? с багажом или без?
Голос полезен при прохождении нами сценария «form-filling» и удобен для заполнения почти любых длинных форм, требующих от пользователя определенного объема информации. И такие формы присутствуют в большинстве мобильных приложений.
Слева направо: приложение РЖД «Пригород», дневник питания FatSecret (пользователям приходится заполнять форму несколько раз в день, выбирая из сотен продуктов), приложение пекарни «Коржов».
Из-за того, что сегодня голосовых ассистентов часто внедряют в чат поддержки и развиваются они именно оттуда, большинство компаний пытается запихнуть функционал приложения в чат.
Пополнить баланс, узнать что-то о товаре или услуге… Это далеко не всегда удобно реализовано, а в случае с голосовым вводом и вовсе контрпродуктивно, хотя бы потому, что рапознавание речи часто работает совсем не идеально.Правильный подход — встраивать ассистента бесшовно в уже существующий функционал приложения, в интерфейсе которого будет происходить заполнение формы, чтобы человек мог просто проверить, что он все правильно сказал, и нажать ОК.
Мы решили показать, как это можно сделать, на примере Habitica — это опенсорсное приложение, написаное почти на чистом Котлине. «Хабитика» отлично подходит под кейс с голосовым ассистентом — тут тоже для того, чтобы завести новую задачу, требуется заполнить довольно объемную форму. Попробуем заменить этот муторный процесс одной фразой с наводящими вопросами?
Я разбил туториал на две части. В этой статье мы разберемся, как добавить голосового ассистента в мобильное приложение и реализовать базовый сценарий (в нашем случае это готовый сценарий по уточнению прогноза погоды и времени — один из самых популярных в мире запросов к голосовым ассистентам). Во второй статье — а она выйдет уже скоро — мы научимся вызывать голосом определенные экраны и реализовывать сложные запросы внутри приложения.
Что нужно для работы
SDK. Мы взяли Aimybox как SDK для построения диалоговых интерфейсов. Из коробки Aimybox дает SDK ассистента и лаконичный и кастомизируемый UI (который при желании можно и вовсе переделать). При этом в качестве движков распознавания, синтеза и NLP можно выбрать из уже имеющихся или создать свой модуль.
По сути, Aimybox реализует архитектуру голосового помощника, стандартизируя интерфейсы всех этих модулей и правильным образом организуя их взаимодействие. Таким образом, внедряя это решение, можно значительно сократить время на разработку голосового интерфейса внутри своего приложения. Подробнее про Aimybox можно прочитать тут или тут.
Инструмент для создания сценария. Сценарий будем писать на JAICF (это опенсорсный и совершенно бесплатный фреймворк для разработки голосовых приложений от Just AI), а интенты распознавать с помощью Caila (NLU-сервис) в JAICP (Just AI Conversational Platform). Про них подробнее расскажу в следующей части туториала — когда дойдем до их использования.
Смартфон. Для тестов нам понадобится смартфон на Android, на котором мы будем запускать и тестить «Хабитику».
Порядок действий
Для начала форкаем «Хабитику» (ветку Release) и ищем самые важные для нас файлы. Я пользовался IDE Android Studio:
Находим MainActivity.kt — туда мы будем встраивать логику.
HabiticaBaseApplication.kt — там будем инициализировать Aimybox.
Activity_main.xml — туда встроим элемент интерфейса.
AndroidManifest.xml — там хранится вся структура приложения и его разрешения.
Согласно инструкции в репе «Хабитики» переименовываем habitica.properties.example и habitica.resources.example, убирая из них example, заводим проект в firebase под приложение и копируем в корень файл google-services.json.
Запускаем приложение, чтобы проверить, что сборка рабочая. Вуаля!
Для начала добавим зависимости Aimybox.
implementation 'com.justai.aimybox:core:0.11.0' implementation("com.justai.aimybox:components:0.1.8")
в dependencies и
maven { url 'https://dl.bintray.com/aimybox/aimybox-android-sdk/' } maven { url "https://dl.bintray.com/aimybox/aimybox-android-assistant/" }
в repositories.
И добавим сразу после compileOptions следующую строку, чтобы все работало корректно
kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() }
Теперь разрешения.
Убираем флаги с разрешений RECORD_AUDIO и MODIFY_AUDIO_SETTINGS в AndroidManifest.xml, чтобы опции выглядели следующим образом.
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android. permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="com.android.vending.BILLING" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
Теперь инициализурем Aimybox в BaseApplication.
Добавляем AimyboxProvider при инициализации класса.
И делаем собственно инициализацию.
private fun createAimybox (context: Context): Aimybox { val unitId = UUID.randomUUID().toString() val textToSpeech = GooglePlatformTextToSpeech(context, Locale("Ru")) val speechToText = GooglePlatformSpeechToText(context, Locale("Ru")) val dialogApi = AimyboxDialogApi( "YOUR KEY", unitId) return Aimybox(Config. create(speechToText, textToSpeech, dialogApi)) }
Вместо YOUR_KEY впоследствии будет ваш код от Aimybox Console.
Теперь встраиваем фрагмент в mainActivity.kt. Предварительно вставляем ФреймЛэйаут в activity_main.xml, прямо под фреймлэйаутом с id bottom_navigation
<FrameLayout android:id="@+id/assistant_container" android:layout_width="match_parent" android:layout_height="match_parent"/>
В сам MainActivity сначала добавляем эксплицитный запрос разрешений в OnCreate
ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.RECORD_AUDIO), 1)
И при их получении добавляем фрагмент в указанный выше фрейм.
@SuppressLint("MissingPermission") override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) { val fragmentManager = supportFragmentManager val fragmentTransaction = fragmentManager. beginTransaction() fragmentTransaction.add(R.id.assistant_container, AimyboxAssistantFragment()) fragmentTransaction.commit() }
Не забываем добавить в OnBackPressed возможности выйти из ассистента после захода в него.
val assistantFragment = (supportFragmentManager.findFragmentById(R.id.assistant_container) as? AimyboxAssistantFragment) if (assistantFragment?.onBackPressed() != true) { return }
Кроме этого, добавим в стили (styles.xml) в AppTheme
<item name="aimybox_assistantButtonTheme">@style/CustomAssistantButtonTheme</item> <item name="aimybox_recognitionTheme">@style/CustomRecognitionWidgetTheme</item> <item name="aimybox_responseTheme">@style/CustomResponseWidgetTheme</item> <item name="aimybox_imageReplyTheme">@style/CustomImageReplyWidgetTheme</item> <item name="aimybox_buttonReplyTheme">@style/CustomButtonReplyWidgetTheme</item>
И отдельные стили чуть ниже:
<style name="CustomAssistantButtonTheme" parent="DefaultAssistantTheme. AssistantButton"> </style> <style name="CustomRecognitionWidgetTheme" parent="DefaultAssistantTheme.Widget.Recognition"> </style> <style name="CustomResponseWidgetTheme" parent="DefaultAssistantTheme.Widget.Response"> </style> <style name="CustomButtonReplyWidgetTheme" parent="DefaultAssistantTheme.Widget.ButtonReply"> </style> <style name="CustomImageReplyWidgetTheme" parent="DefaultAssistantTheme.Widget.ImageReply"> </style>
Давайте проверим, добавился ли микрофончик. Запускаем приложение.
У нас посыпалась куча ошибок о неправильном синтаксисе. Исправляем все, как советует IDE.
Работает!
Но микрофончик наползает на нижнюю навигацию. Давайте чуть поднимем. Добавим в стили выше в CustomAssistantButtonTheme:
<item name="aimybox_buttonMarginBottom">72dp</item>
Лучше!
Теперь подключим туда асисстента и проверим, нормально ли он отвечает. Для этого нам понадобится консоль Aimybox.
Начнем с того, что зайдем в app.aimybox.com под нашим акком гитхаба, сделаем новый проект, подключим пару навыков (я подключил DateTime для теста) и попробуем задать соответсвующие вопросы в асисстенте. Здесь же в настройках, в правом верхнем углу, берем apiKey, который вставляем в createAimybox вместо YOUR KEY.
private fun createAimybox (context: Context): Aimybox { val unitId = UUID.randomUUID().toString() val textToSpeech = GooglePlatformTextToSpeech(context) val speechToText = GooglePlatformSpeechToText(context) val dialogApi = AimyboxDialogApi( "YOUR KEY", unitId) return Aimybox(Config.create(speechToText, textToSpeech, dialogApi)) }
Работает!
Только надпись на английском, давайте поменяем приветственное сообщение в strings.constants.xml.
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- Prefs --> <string name="SP_userID" translatable="false">UserID</string> <string name="SP_APIToken" translatable="false">APIToken</string> <string name="base_url" translatable="false">https://habitica. com</string> <string name="initial_phrase">"Привет! Чем могу помочь?</string>
Ура!
Вот ссылка на репозиторий с кодом.
В следующей статье про ассистента для «Хабитики» расскажу, как с помощью голоса не только узнавать погоду, а управлять непосредственно приложением — переходить по страничкам и добавлять привычки и задания.
Android TV: Голосовой поиск — Sony
Автор: Sony Europe
Чтобы отпраздновать выпуск новой линейки телевизоров BRAVIA на платформе Android TV, мы делаем подробный обзор некоторых самых полезных функций. Мы уже успели рассказать о возможностях Google Cast, а на этой неделе мы познакомим вас с голосовым поиском.
Функция «Голосового поиска» обеспечивает удобную навигацию и управление телевизором с помощью простых голосовых команд, экономя ваши время и усилия. Особенно это удобно, когда вы нигде не можете найти пульт дистанционного управления, даже за диваном.
Существует три способа, как воспользоваться функциями Голосового поиска на телевизоре Sony Android TV…
Голосовой поиск
Думаете, какой бы фильм посмотреть с Джорджем Клуни? Теперь вы можете просто произнести: «Джордж Клуни», и телевизор покажет вам список всех фильмов, в которых снимался Клуни. Или может быть вы ищете острых ощущений в кино? Если так, то просто скажите: «Хочу посмотреть боевик», и телевизор Android TV предложит вам подборку, которая также будет основана на ваших личных предпочтениях.
Голосовое управление
Если вы захотите открыть Netflix, увеличить громкость или переключить канал, это можно сделать с помощью команд голосового управления — достаточно просто сказать, чего вы хотите, и телевизор сделает это. Вам больше не придется переходить из одного меню в другое, чтобы найти нужное вам приложение.
Голосовой вопрос
Наверняка вы часто сталкивались с тем, что когда вам в голову приходит вопрос и вы хотите спросить у Google, нужно вставать и подходить к компьютеру или брать в руки смартфон. С функцией «Голосовой вопрос» теперь можно задавать вопросы телевизору, и ответ мгновенно появится на большом экране. Можно решать математические примеры, узнавать время в других странах или какая на улице погода и стоит ли брать с собой пальто.
Если у вас есть пульт ДУ One-Flick, функцию голосового поиска активировать очень просто — достаточно коснуться значка с микрофоном в верхнем левом углу пульта ДУ. Если у вас есть смартфон, все что нужно — просто установить приложение TV SideView или приложение Android TV Remote Control и коснуться значка микрофона на экране.
Чтобы оценить мощные возможности «Голосового поиска» и понять, как он может вам пригодиться, посмотрите видеоролик, а затем перейдите к списку телевизоров Sony BRAVIA на платформе Android TV модельного ряда 2015 года.
Для использования данного телевизора требуется принять Условия использования Google и Политику конфиденциальности. Google, Google Play, Android, Android TV и другие знаки Google являются товарными знаками компании Google Inc. Более подробную информацию о телевизорах на этой платформе см. www.sony.net/Products/tv/androidtv
blogid0023
Голосовой поиск с InstantSearch Android
В этом руководстве объясняется, как шаг за шагом создать систему голосового поиска с использованием библиотек, предоставляемых Algolia. Вы создадите приложение для Android с классической панелью поиска и кнопкой, которая запускает голосовой ввод. Чтобы создать это приложение, вы будете использовать библиотеки наложения InstantSearch и Voice.
Создание голосового поиска состоит из трех этапов:
- Ввод с использованием преобразования речи в текст
- Выполнение с использованием Algolia
- Вывод с использованием синтеза речи
Слой преобразования речи в текст — ввод
У вас должен быть слой преобразования речи в текст, чтобы преобразовать речь ваших пользователей в то, что понимает Algolia (Algolia не может обрабатывать нетекстовый поиск). Вы можете добавить слой преобразования речи в текст двумя способами:
- С помощью браузера Chrome, собственных приложений iOS или Android или инструмента голосовой платформы, такого как Alexa или Google Assistant, со встроенной функцией преобразования речи в текст.
- Использование стороннего сервиса. Вы отправляете речь пользователя в сервис. Когда вы получаете его обратно, вы отправляете его в Algolia в качестве поискового запроса. Некоторые услуги включают в себя:
- Google Cloud Преобразование речи в текст
- Когнитивные службы Azure
- СборкаAI
Algolia — выполнение
На этапе выполнения вы принимаете запрос пользователя и находите результаты в своем индексе Algolia. Вы представляете соответствующий контент пользователю в конце этого процесса.
Выполнение Algolia состоит из двух частей:
- настройки времени запроса
- конфигурация индекса Обе части являются пользовательскими настройками, которые улучшают производительность поиска для пользователя.
Параметры времени запроса
Параметры времени запроса улучшают результаты поиска во время запроса. Например, выбор языка для Algolia позволяет вам установить определенные функции, такие как игнорирование «шумных» слов, которые пользователь может ввести в свой поисковый запрос. Если вы выберете английский в качестве языка и включите функцию стоп-слов, поисковая система проигнорирует такие слова, как «а» и «ан», поскольку они не имеют отношения к поисковому запросу. Это дает более точные результаты поиска.
- Установите
removeStopWords
и убедитесь, что выбран поддерживаемый язык. Например,en
для английского языка. Этот параметр удаляет стоп-слова, такие как «a», «an» или «the», перед запуском поискового запроса. - Отправьте всю строку запроса как
optionalWords
. В речи часто есть слова, которых нет ни в одной из ваших записей. С этой настройкой записи не обязательно должны соответствовать всем словам. Записи, соответствующие большему количеству слов, ранжируются выше. Например, в устном запросе «Покажи мне все синие платья» только «синие платья» могут дать результаты для магазина одежды: остальные слова должны быть необязательными. - Установите
ignorePlurals
наtrue
и убедитесь, что выбран поддерживаемый язык. Например,en
для английского языка. Этот параметр помечает такие слова, как «автомобиль» и «автомобили», как совпадающие термины. - Применить
analyticsTags
к запросу, включая голосовые запросы. Вы можете активировать эти настройки с помощью параметраnaturalLanguages
. Эти настройки хорошо сочетаются друг с другом, когда формат запроса используется на естественном языке, а не на ключевых словах, например, когда пользователь выполняет голосовой поиск.
Конфигурация индекса
Точно так же вы можете применить некоторые правила, относящиеся к вашему индексу. Эти правила являются динамическими и применяются в зависимости от того, что пользователь вводит в поисковом запросе. Обнаружение намерений пользователя может помочь динамически изменить результаты поиска.
Например, один и тот же поисковый запрос на двух разных сайтах или в приложениях может иметь разное «намерение пользователя». Рассмотрим поисковый запрос «красный».
- На веб-сайте электронной коммерции пользователь хочет найти товары, окрашенные в красный цвет. Правило, отображающее все записи с
цвет
Атрибут «красный» улучшит результаты поиска для этой группы пользователей. - На сайте базы данных фильмов пользователь хочет найти фильмы, в названии которых содержится словосочетание «красный». Обеспечение того, чтобы атрибут
title
был доступен для поиска и занимал первое место в пользовательском рейтинге, улучшит результаты поиска для этой группы пользователей. Чтобы узнать больше о том, как повысить эффективность поиска, ознакомьтесь с правилами для динамических фильтров.
Синтез речи — вывод
Не всем голосовым платформам требуется синтез речи или преобразование текста в речь. Например, веб-сайта, который показывает результаты поиска, может быть достаточно.
Если ваша голосовая платформа нуждается в синтезе речи, ваши варианты:
- Встроенная система, такая как Alexa или Google Assistant.
- Сторонняя система. Большинство современных браузеров поддерживают синтез речи через SpeechSynthesis API. Если вам нужен более широкий выбор голосов, у вас есть Azure Cognitive Services или Polly от Amazon Web Services.
Подготовьте свой проект
Для использования InstantSearch Android вам потребуется учетная запись Algolia. Вы можете создать новую учетную запись или использовать следующие учетные данные:
- Идентификатор приложения:
задержка
- Ключ API поиска:
1f6fd3a6fb973cb08419fe7d288fa4db
- Имя индекса:
Instant_search
Эти учетные данные предоставляют доступ к предварительно загруженному набору данных продуктов, подходящих для этого руководства.
Создать новый проект Android
Начните с создания нового проекта Android.
Откройте Android Studio и выберите Create New Project
.
В Выберите окно шаблона проекта
, выберите Пустое действие
и нажмите Далее
.
Введите имя вашего приложения. Выберите API 21
в качестве минимальной версии SDK. Щелкните Готово
.
Создайте и запустите приложение. Вы должны увидеть свое приложение с пустым экраном.
Добавьте зависимости проекта
В файл build.gradle
на уровне проекта добавьте mavenCentral()
в качестве репозитория зависимостей в репозиториях
блоков:
1 2 3 4 | хранилища { Google() mavenCentral() } |
В файле build.gradle
в модуле app
добавьте следующее в блок зависимостей
:
реализация 'com. algolia:instantsearch-android:3.+' реализация 'com.algolia.instantsearch:voice:1.+' |
Для выполнения сетевых операций в вашем приложении файл AndroidManifest.xml
должен включать следующие разрешения:
1 | <использует-разрешение android:name="android.permission.INTERNET" /> |
Настройте kotlinx.serialization, добавив плагин сериализации в build.gradle вашего проекта
:
1 2 3 4 | зависимости { //... classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" } |
Добавьте плагин сериализации в блок plugins
в build.gradle вашего приложения
:
1 2 3 4 | плагины { // ... id 'kotlinx-сериализация' } |
Создание базового интерфейса поиска
Начните с создания классического интерфейса поиска со строкой поиска и списком результатов. Сначала создайте файл макета с именем list_item.xml
под res/layout/
.
Добавьте TextView
для отображения хита:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Обновите файл макета activity_main.xml
, чтобы иметь минимальный набор компонентов для базового поиска:
-
SearchView
: представление для ввода текстового запроса -
RecyclerView
: список результатов поиска
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|
Представление готово, пора заняться логикой поиска. Создайте новый класс Product
для хранения результатов поиска:
1 2 | @Serializable класс данных Product (переопределить val objectID: ObjectID, val name: String): индексируемый |
Создайте новый класс ProductAdapter
для отображения результатов поиска:
1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | класс ProductAdapter : ListAdapter |
В MainActivity
используйте виджеты SearchBox
и Hits
:
класс MainActivity: AppCompatActivity() { val searcher = HitsSearcher( ID приложения = ID приложения ("задержка"), APIKey = APIKey("1f6fd3a6fb973cb08419fe7d288fa4db"), indexName = IndexName("мгновенный_поиск") ) val searchBox = SearchBoxConnector(искатель, searchMode = SearchMode.AsYouType) val соединение = ConnectionHandler (поле поиска) переопределить удовольствие onCreate(savedInstanceState: Bundle?) { super.onCreate(сохраненныйInstanceState) setContentView (R. layout.activity_main) // Настройка виджета SearchBox val searchView = findViewById |
Создайте и запустите приложение. Базовый поиск готов: вы можете ввести поисковый запрос и мгновенно получить результаты.
Создание возможности голосового поиска
Это двухэтапный процесс:
- Подготовьте проект к голосовому вводу и распознаванию речи.
- Добавьте кнопку справа от строки поиска, которая запускает голосовой ввод.
Настройка разрешения на аудио
Добавить RECORD_AUDIO
разрешение на AndroidManifest.xml
файл:
1 | <использует-разрешение android:name="android.permission.RECORD_AUDIO"/> |
Добавить пользовательский интерфейс голосового ввода
Измените activity_main.xml
, чтобы добавить новую кнопку голосового ввода в существующий пользовательский интерфейс.
Обновленный файл макета должен выглядеть следующим образом:
1 2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
Добавить логику голосового ввода
Добавить базовую реализацию VoiceOverlay:
В прослушивателе кликов проверьте, есть ли у вас разрешение на звук, и отобразите соответствующий диалог:
val микрофон = findViewById | класс MainActivity : AppCompatActivity(), VoiceSpeechRecognizer.ResultsListener { //... override fun onResults(possibleTexts: Array |
В итоге код вашего MainActivity
должен выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | класс MainActivity : AppCompatActivity(), VoiceSpeechRecognizer. ResultsListener { val searcher = HitsSearcher( ID приложения = ID приложения ("задержка"), APIKey = APIKey("1f6fd3a6fb973cb08419fe7d288fa4db"), indexName = IndexName("лучшая покупка") ) val searchBox = SearchBoxConnector(искатель, searchMode = SearchMode.AsYouType) val соединение = ConnectionHandler (поле поиска) переопределить удовольствие onCreate(savedInstanceState: Bundle?) { super.onCreate(сохраненныйInstanceState) setContentView (R.layout.activity_main) // Настройка виджета SearchBox val searchView = findViewById |
Создайте и запустите приложение, чтобы протестировать голосовой поиск. Вы должны увидеть кнопку голосового ввода справа от строки поиска.
VoiceOverlay
должен появиться при нажатии кнопки голосового ввода. При первом запуске он запрашивает разрешения, указанные в разделе настроек разрешения звука.
После того, как вы предоставите все права доступа, появится интерфейс голосового ввода. Попробуйте сказать что-нибудь и получить мгновенные результаты поиска.
Вы можете найти полную реализацию VoiceOverlay
в репозитории git.
Заключение
С помощью библиотек Algolia вы можете создать голосовой поиск, написав менее ста строк кода.
Вы можете настроить поиск и сделать его уникальным, изменив компоненты InstantSearch
, а также компоненты VoiceOverlay
.
Ваш Android имеет скрытое меню голосовых команд
В наши дни большинство из нас практически живут в своих смартфонах. Мы используем их для всего: от фотосъемки почти профессионального качества до онлайн-банкинга и всего, что между ними. И в вашем телефоне есть немало функций, о которых вы, возможно, не знаете. Коснитесь или щелкните, чтобы просмотреть скрытые приложения на смартфоне и узнать, как их найти.
Новейшая мода на смартфоны — это голосовые команды, позволяющие нам управлять телефоном, не поднимая пальца.
Вы всегда можете попросить Google или Siri в зависимости от типа вашего телефона, но знаете ли вы, что есть другие способы использования голосовых команд? Продолжайте читать, чтобы узнать, как найти и использовать скрытое меню голосовых команд на вашем телефоне Android.
Зачем нужны голосовые команды?
Поднять телефон и пользоваться кнопками и вкладками очень просто. Однако, если вы работаете в режиме многозадачности или спешите, вам могут пригодиться голосовые команды.
СВЯЗАННЫЕ : 7 вещей, о которых вы не знали, что ваш Android может делать
Нужно срочно позвонить другу? У вас есть приложение, которым вы постоянно пользуетесь? Нужно проверить свой банковский счет? Сэкономьте время и используйте голосовую команду. Есть уже установленные голосовые команды, но можно и создавать собственные. Давайте посмотрим на оба.
Скрытое меню
Так где же это сверхсекретное меню? Он скрыт с помощью Google Assistant. Вы можете открыть его с помощью голосовых команд:
Голосовые команды
- Скажите « Hey Google », чтобы активировать Google Assistant.
- Затем произнесите « Настройки помощника ». На вашем телефоне появится экран настроек Ассистента.
- Нажмите Просмотреть все настройки помощника .
- Прокрутите вниз и нажмите Ярлыки .
Теперь, когда вы находитесь в меню, вы увидите предлагаемые команды, основанные на приложениях, которые вы используете чаще всего. Это может дать вам хорошее представление о том, для чего у вас уже есть голосовые команды, чтобы вы не создавали дубликаты.
Как создавать пользовательские голосовые команды на Android
Если вы продолжите прокрутку, вы увидите все приложения на вашем телефоне, которые могут использовать голосовые команды, и мы предполагаем, что список длинный. Если вы хотите создать пользовательскую голосовую команду, выходящую за рамки приведенных выше предложений, вот как это сделать:
- Скажите « Hey Google », чтобы активировать Google Assistant.
- Затем произнесите « Настройки помощника ». На вашем телефоне появится экран настроек Ассистента.
- Нажмите Просмотреть все настройки помощника .
- Прокрутите вниз и нажмите Ярлыки .
- Коснитесь имени приложения , для которого вы хотите создать ярлык.
- Коснитесь знака «плюс» + рядом с голосовой командой, которую вы хотите включить.
- Нажмите, когда я скажу Ок, Google , и произнесите фразу, которую вы будете использовать, чтобы открыть ярлык.
- Выберите Google Assistant Should и введите, что Google Assistant должен делать, когда вы произносите пользовательскую фразу.
- Нажмите Сохранить .