Действия в приложениях для автомобилей

Голосовое управление позволяет водителям выполнять задачи, не убирая рук с руля и не отвлекаясь от дороги. Благодаря действиям в приложениях для автомобилей водители могут использовать Gemini или Google Ассистента, чтобы управлять приложениями Android в информационно-развлекательной системе. Например, можно сказать: "Окей, Google, найди уличную парковку в ExampleApp".

Действия в приложениях работают с автомобильными приложениями, которые предоставляют информацию об объектах инфраструктуры. В этом руководстве описаны требования и ограничения, которые нужно учитывать при интеграции действий в приложение с объектами инфраструктуры.

Принцип работы

Действия в приложениях позволяют использовать функции приложений в Gemini или Google Ассистенте, чтобы пользователи могли получать доступ к этим функциям с помощью голосовых команд. Когда пользователь вызывает действие в приложении, Gemini или Google Ассистент сопоставляет запрос со встроенным намерением (BII), объявленным в ресурсе shortcuts.xml приложения, и запускает приложение на запрошенном экране.

Чтобы объявить о поддержке встроенных намерений в приложении, используйте элементы capability Android. Когда вы загружаете приложение в Google Play Console, Google регистрирует возможности, заявленные в приложении, и делает их доступными для пользователей через Gemini или Google Ассистента.

Диаграмма, показывающая выполнение заказов на автомобили.

  1. Пользователь активирует Gemini или Google Ассистента и делает голосовой запрос для определенного приложения.
  2. Gemini или Google Ассистент сопоставляет запрос с предварительно обученной моделью (BII) и извлекает все параметры, поддерживаемые BII.
  3. В этом примере Gemini или Google Ассистент сопоставляет запрос со встроенным намерением GET_CHARGING_STATION, извлекает параметр местоположения "SFO" и преобразует его в географические координаты.
  4. Приложение запускается с помощью определения выполнения для этого встроенного намерения.
  5. Приложение обрабатывает запрос и показывает варианты зарядных станций в информационно-развлекательной системе автомобиля.

Ограничения

Для действий в приложениях для автомобилей действуют следующие ограничения:

Требования

Чтобы подготовить приложение для автомобиля к действиям в приложении, выполните следующие действия:

Определите намерение и выполнение

Первый шаг к включению голосового управления в автомобильном приложении с помощью действий в приложении – определить, какие голосовые команды пользователя, или намерения, поддерживает ваше приложение. Затем вы определяете выполнение для каждого намерения, чтобы указать, как ваше приложение должно удовлетворять запрос.

  • Какие намерения поддерживает ваше приложение для автомобилей?

    В Действиях в приложениях есть предварительно обученные модели голоса, которые называются встроенными намерениями. Они могут понимать и интерпретировать голосовые команды пользователя, когда он говорит Окей, Google. Чтобы отвечать на голосовые запросы, вам нужно просто объявить Gemini или Google Ассистенту, какие встроенные намерения поддерживает ваше приложение. Например, если вы хотите, чтобы ваше приложение помогало находить парковку, реализуйте встроенный интент GET_PARKING_FACILITY. Или реализуйте встроенное намерение GET_CHARGING_STATION, чтобы помочь пользователям найти зарядные станции для электромобилей.

  • Как приложение должно выполнять каждое намерение?

    Приложение выполняет голосовой запрос, открывая нужный экран. Действия в приложениях передают в фулфилмент параметры, извлеченные из запроса пользователя, что позволяет адаптировать ответ к его потребностям.

Интеграция действий в приложении

Определив стратегию выполнения, выполните следующие действия, чтобы включить голосовое управление в автомобильном приложении:

  1. Откройте основное действие AndroidManifest.xml и объявите поддержку ярлыков Android. Элементы ярлыков capability используются для объявления встроенных намерений, которые поддерживает ваше приложение, в Gemini или Google Ассистенте. Подробнее о том, как добавить возможности…

     <!-- AndroidManifest.xml -->
     <meta-data
         android:name="android.app.shortcuts"
         android:resource="@xml/shortcuts" />
    
  2. Затем добавьте элемент <intent-filter> в AndroidManifest.xml. Это позволит Gemini или Google Ассистенту использовать ссылки на контент для подключения к контенту вашего приложения.

    • Для выполнения в Android Auto <intent-filter> совпадает с мобильным приложением.

    • В Android Automotive OS сеанс CarAppService вашего приложения активирует Gemini или Google Ассистента. Чтобы сеанс мог активировать ссылку на контент, укажите <intent-filter> в элементе <activity> файла AndroidManifest.xml.

    <!-- AndroidManifest.xml -->
    <activity
      ...
      android:name="androidx.car.app.activity.CarAppActivity">
      ...
      <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data
            android:scheme="YOUR_SCHEME"
            android:host="YOUR_HOST" />
      </intent-filter>
    </activity>
    
  3. Если в каталоге res/xml вашего приложения нет файла shortcuts.xml, создайте его. Подробнее о том, как действия в приложении используют ярлыки Android…

    В файле shortcuts.xml реализуйте capability для выбранного встроенного намерения. Затем добавьте вложенный элемент <intent>, чтобы определить выполнение приложения.

    <!-- shortcuts.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    
      <capability android:name="actions.intent.GET_PARKING_FACILITY">
        <intent>
          <url-template
          android:value="YOUR_SCHEME://YOUR_HOST{?name,address,disambiguatingDescription,latitude,longitude}">
    
          <!-- Facility name, e.g. "Googleplex" -->
          <parameter
            android:name="parkingFacility.name"
            android:key="name"/>
          <!-- Address, e.g. "1600 Amphitheatre Pkwy, Mountain View, CA 94043" -->
          <parameter
            android:name="parkingFacility.address"
            android:key="address"/>
          <!-- Disambiguate the type of service, e.g. "valet" -->
          <parameter
            android:name="parkingFacility.disambiguatingDescription"
            android:key="disambiguatingDescription"/>
          <!-- Latitude, e.g. "37.3861" -->
          <parameter
            android:name="parkingFacility.geo.latitude"
            android:key="latitude"/>
          <!-- Longitude, e.g. "-122.084" -->
          <parameter
            android:name="parkingFacility.geo.longitude"
            android:key="longitude"/>
        </intent>
      </capability>
    </shortcuts>
    
  4. Наконец, обновите логику Session() в приложении для автомобиля, чтобы обрабатывать входящие действия в приложении. В примерах ниже показана обработка намерений для Session.onCreateScreen() и Session.onNewIntent().

    onCreateScreen()

    Kotlin

    @Override
    fun onCreateScreen(@NonNull intent: Intent): Screen {
      if (intent.getData() != null) {
          val uri: Uri = intent.getData()
          // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
          // Build your Templates with parsed uri parameters
      ...
     }
    }

    Java

    @Override
    public Screen onCreateScreen(@NonNull Intent intent) {
    if (intent.getData() != null) {
      Uri uri = intent.getData();
      // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
      // Build your Templates with parsed uri parameters
    ...
    }
    }

    onNewIntent()

    Kotlin

    @Override
    fun onNewIntent(@NonNull intent: Intent): Screen {
      if (intent.getData() != null) {
          val uri: Uri = intent.getData()
          // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
          // Build your Templates with parsed uri parameters
          ...
      }
    }

    Java

    @Override
    public void onNewIntent(@NonNull Intent intent) {
    if (intent.getData() != null) {
     Uri uri = intent.getData();
     // uri = "YOUR_SCHEME://YOUR_HOST?name=Levis%20center"
     // Build your Templates with parsed uri parameters
     ...
    }
    }

Как посмотреть, протестировать и опубликовать приложение

В Действиях в приложениях есть инструменты для предварительного просмотра и тестирования. Ознакомьтесь с обзором Действий в приложениях, чтобы узнать больше об этих инструментах и о том, как опубликовать в Google Play приложение для автомобиля с поддержкой голосовых команд.