"Intenção de participar" é um novo recurso do Android Sender que permite que um app remetente "participe" de uma sessão do Google Cast iniciada por outros apps ou voz. Configure o app remetente para ser iniciado por uma intent criada pelo SDK do Cast.
Por exemplo, ao usar a voz para iniciar uma sessão do Cast, o SDK do Cast cria uma 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 a intent para iniciar o app e participar da sessão de transmissão.
Consulte o exemplo Castvideos-Android (link em inglês) para uma implementação funcional da Intent to Join.
Como usar um Android Sender
Para ativar esse recurso, siga estas etapas no app:
Verifique se o app já está usando a versão do SDK do remetente do Android posterior à
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, na sigla em inglês) para iniciar seu app
e entrar em uma sessão de transmissão.
Recomendamos usar a atividade em que
SessionManagerListener
está hospedado, e
onSessionStarted()
ou
onSessionStartFailed()
será chamado.
O novo filtro de intent precisa ser exclusivo em todo o sistema Android. Recomendamos
que você use 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 de 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()
:
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); } ... }
Configuração do Play Console do Google Cast
Para usar o recurso de intent para participar, o URI do app e o nome do pacote precisam ser adicionados ao Console para desenvolvedores do Google Cast.
Ele também precisa ser listado e publicado para que a intent de participação funcione corretamente.
Para listar seu app, alterne a opção de listagem para "SIM" e forneça um título, uma descrição e um gráfico de 512 x 512 para o app.
Após a configuração, é possível testar a implementação com as notificações de controle remoto (RCN, na sigla em inglês), conforme mostrado abaixo:
- Instale o app Google Home em um smartphone Android e conecte-se ao Wi-Fi no smartphone.
- O dispositivo compatível com Cast configura o dispositivo Google Home na mesma rede.
- Inicie uma sessão de transmissão com o dispositivo Google Home usando a Ferramenta de comando e controle (CaC), outro dispositivo Android ou iOS, ou por voz e verifique se o app receptor da Web foi iniciado.
- Aguarde alguns segundos para acessar a RCN no smartphone e toque na notificação para acionar a intent. A intent precisa ser transmitida para qualquer app que a registre com os dados necessários para participar da sessão.
SessionManagerListener.onSessionStarted(T, String)
será acionado e entrará na sessão.
Verificação
Se o app entrar na sessão,
SessionManagerListener.onSessionStarted(T, String)
será chamado. Caso contrário,
SessionManagerListener.onSessionStartFailed(T, int)
será chamado. Se o app já processar esses eventos corretamente (por
exemplo, iniciando o controle expandido ou o minicontrole), não será necessário
fazer mais nada.