Интеграция голосового поиска в Google Assistant не работает с несколькими словами
В моем проекте Android мы недавно добавили Голосовой поиск по документации. Работает нормально, но только при поиске по одному слову. Похоже, это не намеченное поведение, поскольку в примерах Google они ищут "поездки в Мауи".
Мы пробовали много команд поиска на разных устройствах с помощью приложения Google Assistant (последняя версия), а также запуска через adb.
Итак, что работает для нас: "Хорошо, Google, ищи шоколад в {ourApp}".
adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION --es query 'chocolate'
Результат: приложение запускается на соответствующем экране с соответствующим запросом
Что не работает, хотя: "Хорошо, Google, поиск мороженого на {ourApp}".
adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION --es query 'ice cream'
Результат: Google Assistant отображает результаты веб-поиска и через adb мы получаем:
Starting: Intent { act=com.google.android.gms.actions.SEARCH_ACTION pkg=cream (has extras) }
Error: Activity not started, unable to resolve Intent { act=com.google.android.gms.actions.SEARCH_ACTION flg=0x10000000 pkg=cream (has extras) }
Это выглядит так, как будто команда была неправильной, поскольку система распознает "сливки" в качестве имени пакета. Результат тот же, даже если мы явно добавим имя пакета в команду adb.
Наш код интеграции:
<activity
android:name=".features.search.activities.SearchResultsActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
И тогда в SearchResultsActivity:
searchTerm = intent.getStringExtra(SEARCH_TERM_KEY) ?: intent.getStringExtra(SearchManager.QUERY).orEmpty()
Как добиться поиска по нескольким словам с помощью Google Assistant?
0 ответов
Я не могу вам сказать, почему (документация не найдена), но нужно избегать пробелов.
Таким образом, это ваш фиксированный пример:
adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION --es query 'ice\ cream'
В качестве обходного пути я написал следующий сценарий (названный send-search.sh
):
inputQuery=$(printf %q "$1")
adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION -e query "$inputQuery"
Вот как вы его запускаете:
sh send-search.sh "ice\ cream"