«Намерение присоединиться» — это новая функция 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), как показано ниже:
- Установите приложение Google Home на телефон Android и подключитесь к Wi-Fi на телефоне.
- Устройство с поддержкой Cast настраивает устройство Google Home в той же сети.
- Инициируйте сеанс Cast с устройством Google Home с помощью инструмента управления и контроля (CaC) , другого устройства Android или iOS или с помощью голоса и проверьте, запущено ли приложение Web Receiver.
- Подождите несколько секунд, чтобы получить RCN на телефоне, и коснитесь уведомления, чтобы активировать намерение. Намерение должно быть передано любому приложению, которое регистрирует намерение с необходимыми данными для присоединения к сеансу.
SessionManagerListener.onSessionStarted(T, String)
будет запущен и присоединится к сеансу.
Проверка
Если ваше приложение успешно присоединяется к сеансу, вызывается SessionManagerListener.onSessionStarted(T, String)
. В противном случае вызывается SessionManagerListener.onSessionStartFailed(T, int)
. Предполагая, что ваше приложение уже правильно обрабатывает эти события (например, запускает расширенный контроллер или мини-контроллер), вам больше ничего делать не нужно.