Intención de unirse

"Intent para unirse" es una nueva función de Android Sender que permite a una app remitente "unirse" a una sesión de transmisión que iniciaron otras apps o voces. Configura la app emisora para que se inicie con un intent creado por el SDK de Cast.

Por ejemplo, cuando usas la voz para iniciar una sesión de transmisión, el SDK de Cast crea una notificación que permite al usuario controlar la reproducción en todos los teléfonos Android conectados a la misma red. Cuando se presiona la notificación, el SDK de Cast crea el intent para iniciar la app y unirse a la sesión de Cast.

Consulta la muestra CastVideos-Android para obtener una implementación funcional de Intent de unión.

Usa un remitente de Android

Para habilitar esta función, sigue estos pasos en tu app:

Asegúrate de que tu app ya use la versión 11.4.0 del SDK de Android Sender. En build.gradle:

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

Agrega un filtro de intents nuevo a una actividad en la que desees controlar el intent. Las notificaciones de control remoto (RCN) usarán el intent para iniciar tu app y unirse a una sesión de transmisión. Te recomendamos que uses la actividad en la que se aloja SessionManagerListener y se llamará a onSessionStarted() o onSessionStartFailed(). Asegúrate de que el nuevo filtro de intents sea único en todo el sistema Android. Te recomendamos que uses la etiqueta <data> para hacerlo de la siguiente manera:

<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>

Ejemplos de etiqueta <data>:

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

En la actividad en la que defines el nuevo filtro de intents, llama a SessionManager.startSession(Intent) en onResume():

Kotlin
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)
    }
    ...
}
Java
@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);
    }
    ...
}

Configuración de la Consola para desarrolladores de Google Cast

Para utilizar la función de intent de unión, el URI de la app y el nombre del paquete deben agregarse en la Consola para desarrolladores de Google Cast.

El receptor también debe aparecer en la lista y publicar el mensaje para que Intent to Join funcione correctamente.

Para incluir tu app, activa la opción de la ficha en "SÍ" y proporciona un título, una descripción y un gráfico de 512 x 512 para la app.

Después de la configuración, puedes probar la implementación con las notificaciones de control remoto (RCN) como se muestra a continuación:

  1. Instala la app de Google Home en un teléfono Android y conéctate a la red Wi-Fi en el teléfono.
  2. El dispositivo compatible con Cast configura el dispositivo Google Home en la misma red.
  3. Inicia una sesión de transmisión con el dispositivo Google Home mediante la herramienta de comando y control (CaC), otro dispositivo Android o iOS, o con la voz y comprueba si se inició la app del receptor web.
  4. Espera unos segundos para obtener RCN en el teléfono y presiona la notificación para activar el intent. El intent se debe transmitir a cualquier app que lo registre con los datos necesarios para unirse a la sesión.

Se activará SessionManagerListener.onSessionStarted(T, String) y te unirás a la sesión.

Verificación

Si tu app se une a la sesión de forma correcta, se llamará a SessionManagerListener.onSessionStarted(T, String). De lo contrario, se llama a SessionManagerListener.onSessionStartFailed(T, int). Si suponemos que tu app ya controla esos eventos de manera correcta (por ejemplo, iniciar un control expandido o minicontrol), no necesitas hacer nada más.