Интеграция голосового поиска в 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"
Другие вопросы по тегам