Вызов приложения переднего плана

Действия приложения позволяют пользователям общаться с Google Assistant и сразу переходить к определенным пунктам назначения приложения, когда они говорят что-то вроде: «Эй, Google, закажи мне поездку в примере приложения». С помощью вызова приложения на переднем плане вы можете еще больше улучшить работу, когда у пользователя уже открыто ваше приложение.

Вызов приложения на переднем плане позволяет сопоставлять встроенные намерения (BII), не требуя упоминания имени приложения, пока определенное действие находится на переднем плане устройства.

Например, пользователь показывает ваше приложение для совместного использования поездок на переднем плане и говорит или вводит в Google Assistant «Закажи мне поездку в Маунтин-Вью» . Ваше приложение использует эти входные данные, чтобы установить в поле назначения значение Маунтин-Вью. Затем, когда пользователь говорит или вводит «Закажи мне поездку из SFO», ваше приложение может установить место посадки, сохраняя при этом состояние вашего приложения.

Ограничения

Вызов приложения переднего плана доступен только для следующих BII:

Чтобы получить поддержку локали и примеры запросов, связанных с вызовом приложения переднего плана для конкретного BII, см. встроенный справочник по намерениям .

Поддержка вызова приложения на переднем плане

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

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

  1. В файле shortcuts.xml добавьте тег <intent> к BII <capability> , который вы хотите поддерживать вызов приложения переднего плана.
  2. Внутри тега <intent> добавьте тег <extra> .
  3. В теге <extra> установите android:key "requiredForegroundActivity" и установите android:value для действия, которое вы хотите, чтобы оно было на переднем плане. Укажите действие без каких-либо сокращений классов, используя имя пакета приложения, за которым следует косая черта (/), а затем имя действия: APP_PACKAGE_NAME/ACTIVITY_NAME
  4. В действии переднего плана, которое вы указали для "requiredForegroundActivity" , реализуйте метод onNewIntent() для обработки намерения глубокой ссылки с установленным флагом SINGLE_TOP . Помощник передает намерение глубокой ссылки с этим флагом как выполнение, когда указанное действие находится на переднем плане.
  5. Рассматривайте вызовы onNewIntent() как обновления активности переднего плана и управляйте состоянием этой активности с помощью параметров, извлеченных из глубокой ссылки.

Если ваше приложение использует действие маршрутизатора, чтобы все внешние глубокие ссылки запускали одно действие шлюзового маршрутизатора, см. раздел Обработка действий маршрутизатора .

Пример

В следующем фрагменте примера файла shortcuts.xml показано, как добавить атрибут requiredForegroundActivity :

  <capability name="actions.intent.CREATE_TAXI_RESERVATION">
      <!-- Trigger with foreground app invocation if MainActivity is in the foreground. -->
      <intent
          android:targetClass="com.example.app.MainActivity"
          android:targetPackage="com.example.app">
          <parameter
              android:name="taxiReservation.dropoffLocation.name"
              android:key="dropoff" />
          <extra
              android:key="requiredForegroundActivity"
              android:value="com.example.app/com.example.app.MainActivity" />
      </intent>
      <!-- This won't trigger if MainActivity is in the foreground. -->
      <intent
          android:targetClass="com.example.app.MainActivity"
          android:targetPackage="com.example.app">
          <parameter
              android:name="taxiReservation.dropoffLocation.name"
              android:key="dropoff" />
      </intent>
  </capability>

Разрешения пользователя

В настройках устройства пользователи должны включить параметр «Использовать текст с экрана», чтобы вызов приложения на переднем плане работал.

Чтобы вызов приложения переднего плана работал для пользователя, у пользователя должен быть включен параметр «Использовать текст с экрана» . Местоположение и точное название этого параметра могут различаться в зависимости от OEM-производителя или производителя устройства. Например, вместо этого параметр устройства может называться «Использовать контекст экрана на устройстве пользователя».

Чтобы активировать эту настройку Android на телефоне Pixel, сначала выберите «Настройки» > «Приложения и уведомления» > «Приложения по умолчанию» > «Приложение-помощник» . Затем на экране «Помощь и голосовой ввод» включите « Использовать текст с экрана» .

Проверьте свой вызов

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

  1. Следуйте инструкциям в разделе «Разрешения пользователя» , чтобы включить параметр «Использовать текст с экрана» .
  2. Откройте приложение для действия, которое вы указали в качестве обязательного действия переднего плана.
  3. Нажмите и удерживайте кнопку «Домой», чтобы открыть Ассистент в качестве наложения на текущее приложение. Предоставьте запрос, соответствующий реализованному вами BII, без упоминания самого имени приложения. В случае успеха ваше приложение обновляется на основе вашего запроса, сохраняя состояние и не перезапуская действие.

Управление действиями маршрутизатора

Некоторые приложения обрабатывают все внешние глубокие ссылки, используя одно действие шлюзового маршрутизатора . Затем действие маршрутизатора запускает соответствующее действие бизнес-логики (после любых проверок и проверок) и возвращает действие бизнес-логики на передний план.

Запуск глубокой ссылки может привести к добавлению активности маршрутизатора в верхнюю часть стека задач над основной активностью. Для приложений, использующих действие маршрутизатора, вы должны убедиться, что действие маршрутизатора доставляет намерение, отправленное Google Assistant, текущему экземпляру действия на переднем плане. Способ достижения этого требования меняется в зависимости от того, где начинается активность вашего маршрутизатора.

Если ваш маршрутизатор запускается в том же стеке задач, что и ваша бизнес-логика, перенаправьте намерение, используя побитовое ИЛИ SINGLE_TOP , CLEAR_TOP и NEW_TASK :

Котлин

Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK

Ява

Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK

Если ваш маршрутизатор запускается в стеке задач, отдельном от вашей активности бизнес-логики, вместо этого перенаправьте намерение с флагом SINGLE_TOP на активность бизнес-логики.