Intenção de participar

"Intenção de participar" é um novo recurso do Android Sender que permite que uma app do remetente para "participar" uma sessão de transmissão iniciada por outros apps ou voz Você configura o app remetente para ser iniciado por uma intent criada pelo Google Cast SDK do Vertex AI Pipelines.

Por exemplo, ao usar a voz para iniciar uma sessão de transmissão, o SDK do Cast cria um notificação que permite ao usuário controlar a reprodução em todos os smartphones Android na mesma rede. Quando a notificação é tocada, o SDK do Cast cria o para iniciar seu app e participar da sessão de transmissão.

Consulte a Exemplo do CastVídeos para Android para uma implementação de Intent to Join.

Como usar um Android Sender

Para ativar esse recurso, siga estas etapas no seu app:

Verifique se o app já está usando uma versão do SDK do remetente do Android mais recente que 11.4.0. Em build.gradle:

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

Adicione um novo filtro de intent a uma atividade em que você quer processar a intent. A intent será usada pelas Notificações de controle remoto (RCN) para iniciar seu app e participe de uma sessão de transmissão. Recomendamos que você use a atividade em que SessionManagerListener está hospedado e onSessionStarted() ou onSessionStartFailed() será chamado. Confira se o novo filtro de intent é exclusivo em todo o sistema Android. Qa recomendamos usar a tag <data> para fazer isso, da seguinte maneira:

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

Exemplos da tag <data>:

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

Na atividade em que você define o novo filtro de intent, chame SessionManager.startSession(Intent) em 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);
    }
    ...
}

Configuração do Play Console do Google Cast

Para usar o recurso "Intent to Join", o URI do app e o nome do pacote precisam ser adicionado na Console para desenvolvedores do Google Cast.

O receptor também precisa estar listado e publicado para que o Intent to Join funcione. corretamente.

Para listar seu app, alterne a opção de listagem para "SIM". e fornecer um título, descrição e um gráfico de 512 x 512 para seu aplicativo.

Após a configuração, teste a implementação com as notificações de controle remoto (RCN) como abaixo:

  1. Instale o app Google Home em um smartphone Android e conecte-se ao Wi-Fi no celular.
  2. O dispositivo compatível com Cast configura o dispositivo Google Home na mesma rede.
  3. Inicie uma sessão de transmissão com o dispositivo Google Home usando o Ferramenta de comando e controle (CaC), em outro dispositivo Android ou iOS ou por voz e verificar se o receptor é iniciado.
  4. Aguarde alguns segundos para receber a RCN no telefone e toque na notificação para acionarão a intent. A intent precisa ser transmitida para qualquer app que registra a intent com os dados necessários para participar da sessão.

SessionManagerListener.onSessionStarted(T, String) será acionada e participará da sessão.

Verificação

Se o app entrar na sessão, SessionManagerListener.onSessionStarted(T, String) for chamado. Caso contrário, SessionManagerListener.onSessionStartFailed(T, int) for chamado. Supondo que seu aplicativo já processe esses eventos corretamente (por por exemplo, iniciar um controle expandido ou minicontrole), você não precisa fazer algo mais.