Интеграция голосового поиска в Google Assistant не работает с несколькими словами - PullRequest
0 голосов
/ 21 января 2019

В моем проекте для Android мы недавно добавили Голосовой поиск по документации.Работает нормально, но только при поиске по одному слову.Похоже, что это не намеченное поведение, поскольку в примерах Google они ищут «поездки в Мауи».

Мы пробовали много команд поиска на разных устройствах с помощью приложения Google Assistant (последняя версия), а такжекак запуск через adb.

Итак, что работает для нас: «Хорошо, Google, ищите шоколад в {ourApp}».

adb shell am start -a com.google.android.gms.actions.SEARCH_ACTION  --es query 'chocolate'

Результат: приложение запускается на правильном экране с правильнымquery

Что не работает, хотя: "Хорошо, 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?

1 Ответ

0 голосов
/ 29 июля 2019

Я не могу сказать вам почему (документация не найдена), но пробелы необходимо экранировать.

Следовательно, это ваш фиксированный пример:

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"
...