Намерение присоединиться

«Намерение присоединиться» — это новая функция Android Sender, которая позволяет приложению-отправителю «присоединяться» к сеансу Cast, инициированному другими приложениями или голосом. Вы настраиваете приложение-отправитель на запуск по намерению, созданному Cast SDK.

Например, при использовании голоса для запуска сеанса Cast Cast SDK создает уведомление, которое позволяет пользователю управлять воспроизведением на всех телефонах Android в одной сети. При нажатии на уведомление Cast SDK создает намерение запустить ваше приложение для присоединения к сеансу Cast.

См. образец CastVideos-Android для ознакомления с рабочей реализацией намерения присоединиться.

Использование отправителя Android

Чтобы включить эту функцию, выполните в своем приложении следующие шаги:

Убедитесь, что ваше приложение уже использует Android Sender SDK версии выше 11.4.0. В build.gradle :

dependencies {
    api 'com.google.android.gms:play-services-cast-framework:11.4.0'
}

Добавьте новый фильтр намерений в действие, в котором вы хотите обработать намерение. Это намерение будет использоваться уведомлениями удаленного управления (RCN) для запуска вашего приложения и присоединения к сеансу трансляции. Мы рекомендуем использовать действие, в котором размещен SessionManagerListener , и будет вызываться либо onSessionStarted() , либо onSessionStartFailed() . Убедитесь, что новый фильтр намерений уникален во всей системе Android. Для этого мы рекомендуем использовать тег <data> следующим образом:

<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_app_scheme" android:host="your_app_host"
        android:path="your_app_path"/>
</intent-filter>

Примеры тега <data> :

<data android:scheme="https" android:host="example.com"
      android:path="/cast/join"/>

В действии, где вы определяете новый фильтр намерений, вызовите SessionManager.startSession(Intent) в onResume() :

Котлин
override fun onResume() {
    ...
    val intent = intent
    // Intent with format: "<your_app_scheme>://<your_app_host><your_app_path>"
    val intentToJoinUri = Uri.parse("https://example.com/cast/join")
    if (intent.data != null && intent.data == intentToJoinUri) {
        mCastContext.sessionManager.startSession(intent)
    }
    ...
}
Джава
@Override
protected void onResume() {
    ...
    Intent intent = getIntent();
    // Intent with format: "<your_app_scheme>://<your_app_host><your_app_path>"
    Uri intentToJoinUri = Uri.parse("https://example.com/cast/join");
    if (intent.getData() != null && intent.getData().equals(intentToJoinUri)) {
        mCastContext.getSessionManager().startSession(intent);
    }
    ...
}

Настройка консоли разработчика Google Cast

Чтобы использовать функцию «Намерение присоединиться», необходимо добавить URI приложения и имя пакета в консоль разработчика Google Cast .

Ваш получатель также должен быть указан и опубликован, чтобы намерение присоединиться работало правильно.

Чтобы разместить свое приложение, переключите параметр листинга на «ДА» и укажите название, описание и изображение 512x512 для вашего приложения.

После настройки вы можете протестировать реализацию с помощью уведомлений удаленного управления (RCN), как показано ниже:

  1. Установите приложение Google Home на телефон Android и подключитесь к Wi-Fi на телефоне.
  2. Устройство с поддержкой Cast настраивает устройство Google Home в той же сети.
  3. Инициируйте сеанс трансляции с устройством Google Home с помощью инструмента управления и контроля (CaC) , другого устройства Android или iOS или с помощью голоса и проверьте, запущено ли приложение веб-приемника.
  4. Подождите несколько секунд, чтобы получить RCN на телефоне, и коснитесь уведомления, чтобы активировать намерение. Намерение должно быть передано любому приложению, которое регистрирует намерение с необходимыми данными для присоединения к сеансу.

SessionManagerListener.onSessionStarted(T, String) будет запущен и присоединится к сеансу.

Проверка

Если ваше приложение успешно присоединяется к сеансу, вызывается SessionManagerListener.onSessionStarted(T, String) . В противном случае вызывается SessionManagerListener.onSessionStartFailed(T, int) . Предполагая, что ваше приложение уже правильно обрабатывает эти события (например, запускает расширенный контроллер или мини-контроллер), вам больше ничего делать не нужно.