Android-приложение-действие с пользовательским шаблоном запроса

У меня есть приложение для Android, которое использует com.google.android.gms.actions.SEARCH_ACTION для поиска фразы в моем приложении с помощью поиска PHRASE в APP_NAME, но теперь я хочу использовать собственную голосовую команду, например APP_NAME PHRASE, чтобы открыть мое приложение и передать его. фраза с помощью помощника Google. Так возможно ли реализовать эту функцию?

Я попытался с https://github.com/actions-on-google/appactions-fitness-kotlin чтобы получить глубокое представление о том, как на самом деле работает намерение действия, и обнаружил, что это может быть возможно с помощью глубоких ссылок.

Здесь, в этом примере, в файле actions.xml одно действие action.intent.GET_EXERCISE_OBSERVATION реализовано, как вы можете видеть ниже в коде.

<action intentName="actions.intent.GET_EXERCISE_OBSERVATION">

        <fulfillment
            fulfillmentMode="actions.fulfillment.SLICE"
            urlTemplate="content://com.devrel.android.fitactions.FitSliceProvider/stats{?exerciseType}">

            <parameter-mapping
                entityMatchRequired="true"
                intentParameter="exerciseObservation.aboutExercise.name"
                required="true"
                urlParameter="exerciseType" />

        </fulfillment>

        <fulfillment
            fulfillmentMode="actions.fulfillment.DEEPLINK"
            urlTemplate="https://fit-actions.firebaseapp.com/stats" />


        <parameter name="exerciseObservation.aboutExercise.name">
            <entity-set-reference entitySetId="ExerciseEntitySet" />
        </parameter>

</action>

<!-- Defines an entity set with our supported entities -->

<entity-set entitySetId="ExerciseEntitySet">

        <entity
            name="@string/activity_running"
            alternateName="@array/runningSynonyms"
            identifier="RUNNING" />
        <entity
            name="@string/activity_walking"
            alternateName="@array/walkingSynonyms"
            identifier="WALKING" />
        <entity
            name="@string/activity_cycling"
            alternateName="@array/cyclingSynonyms"
            identifier="CYCLING" />
</entity-set>

Но теперь у меня есть несколько вопросов, касающихся этого кода.

  1. Как urlTemplate content://com.devrel.android.fitactions.FitSliceProvider/stats{?exerciseType} для actions.fulfillment.SLICE генерируется?
  2. Может ли exercObservation.aboutExercise.name иметь какое-либо пользовательское значение, а не определенное в наборе сущностей?
  3. Как urlTemplate https://fit-actions.firebaseapp.com/stats для actions.fulfillment.DEEPLINK генерируется?

После реализации этого я думаю actions.intent.OPEN_APP_FEATURE будет полезно с помощью выполнения DEEPLINK.

Так возможно ли реализовать это с помощью actions.intent.OPEN_APP_FEATURE "?

0 ответов

  1. Как urlTemplate content://com.devrel.android.fitactions.FitSliceProvider/stats{?exerciseType} для actions.fulfillment.SLICE сгенерирован?

В urlTemplateзначение (будь то выполнение с помощью фрагмента или глубокой ссылки) полностью зависит от вас. В случае глубинной ссылки это URL-адрес, который система вызовет, чтобы открыть ваше приложение. В случае среза это contentUri, который система будет вызывать для рендеринга среза. Параметры внутри {} будут расширены значениями во время выполнения. Чтобы лучше понять, как это работает, см. Документацию здесь и здесь или сеанс Google I/O 2019.

  1. Может ли упражнение Observation.aboutExercise.name иметь любое настраиваемое значение, а не определено в наборе сущностей?

Я не совсем понимаю, что вы имеете в виду, но позвольте мне попытаться рассказать подробнее. Пары имя изexerciseObservation.aboutExercise.nameустанавливается для каждого намерения помощника и не может быть изменен. Эти значения перечислены в документации (пример). Фактические значения параметров (которые заполняются запросом пользователя во время выполнения) являются динамическими и будут изменяться в зависимости от запроса пользователя и намерения помощника. Для каждого намерения помощника вы можете обратиться к документации, чтобы узнать, какие могут быть возможные значения. В некоторых случаях они взяты из определенного списка значений (например, для GET_EXERCISE_OBSERVATION), для других это может быть значение в произвольной форме на основе ввода пользователя, а для других вы можете при желании расширить значения, используя встроенный инвентарь (это то, что вы используете<entity-set> для вашего примера).

  1. Как urlTemplate https://fit-actions.firebaseapp.com/stats для actions.fulfillment.DEEPLINK генерируется?

Согласно № 1, значение urlTemplateполностью зависит от вас. Это может быть любой URI намерения Android. Система вызовет этот Uri для запуска вашего приложения /Activity.

После реализации этого я думаю actions.intent.OPEN_APP_FEATURE будет полезно с помощью выполнения DEEPLINK.

Так можно ли реализовать это с помощью actions.intent.OPEN_APP_FEATURE"?

OPEN_APP_FEATUREэто просто еще одно намерение помощника, которое позволяет универсальный вызов функции вашего приложения. В документах были недавно обновлены с некоторыми примерами запросами. Например.

Открыть историю Youtube

В этом примере будет открыто приложение с именем "YouTube" и передается имя функции "history" в приложение для обработки.

Функция Open Example App Example

В этом примере будет открыто приложение с именем "Пример приложения" и передано имя функции "Пример функции" приложению для обработки.

Другие вопросы по тегам