Com o aumento das telas nos veículos com Android Auto e Android Automotive OS, os desenvolvedores enfrentam um desafio duplo: oferecer experiências ricas e adaptáveis quando o carro está estacionado e experiências seguras e baseadas em modelos quando o motorista está dirigindo. Nesta sessão técnica abrangente de 30 minutos, vamos analisar a arquitetura completa e as abordagens de desenvolvimento para adaptar apps Android a carros.
Desde os fundamentos do design de apps para uso em carros até as abordagens mais recentes para criar experiências de mídia que mudam de áudio para vídeo quando o carro é estacionado, você vai sair com tudo o que precisa saber para colocar seu app na estrada.
Transcrição
Certo.
Olá, pessoal.
Agradecemos sua participação nesta sessão, "O carro é sua tela".
Esta sessão é sobre como desbloquear o desenvolvimento Android para a estrada.
Meu nome é Paul Lammertsma.
E eu sou Thomas Weathers.
Somos engenheiros de relações com desenvolvedores na equipe do Android para carros.
Tenho certeza de que muitos de vocês gastaram muito tempo e energia para garantir que seus apps tenham uma ótima aparência e funcionem perfeitamente em uma ampla variedade de telas e dispositivos, smartphones, dobráveis, tablets e tudo mais.
Hoje, vamos focar em uma tela que talvez você não tenha considerado.
E pode ajudar você a alcançar seus usuários de uma forma única.
Essa é a tela do carro.
Vamos começar com uma breve visão geral do que significa o Android para carros.
O Android para carros não é uma coisa monolítica.
Há duas plataformas que você pode segmentar.
Primeiro, há o Android Auto, que é um sistema projetado e alimentado por smartphone.
Com o Android Auto, o app é executado no smartphone e projeta a interface na tela do carro usando uma conexão com ou sem fio.
E, em segundo lugar, há o Android Automotive OS, uma variante do Android que é executada diretamente no veículo.
O Android Automotive OS funciona de forma independente do smartphone, tem acesso direto ao hardware do veículo, como controle de temperatura e rádio, e, o mais importante, também gerencia a própria conexão de dados.
Um subconjunto de carros que usam o Android Automotive OS são os carros com o Google integrado.
Os carros com o Google integrado também vêm com apps e serviços do Google, como a Play Store, o Gemini e o Google Maps.
Embora existam duas plataformas, nosso objetivo é facilitar o desenvolvimento de apps que ofereçam ótimas experiências em ambas.
Este é um exemplo de um app de música criado uma vez usando a biblioteca Car App e como ele ficaria no Android Auto e no Android Automotive OS, em vários tamanhos e formatos de tela.
Há muitos tipos diferentes de dispositivos e plataformas para os quais você pode criar.
Então, por que usar isso para carros?
Primeiro, a escala aqui é enorme.
Atualmente, há mais de 250 milhões de carros compatíveis com o Android Auto em circulação e mais de 100 modelos de carros com o Google integrado de 16 marcas diferentes.
E, quando seus apps estão em carros, você alcança os usuários nos deslocamentos diários, nas atividades em família, nas tarefas do dia a dia e até mesmo em viagens.
Nos EUA, de acordo com a Pesquisa de Direção Americana de 2024 da AAA, os motoristas passam, em média, 60 minutos por dia ao volante.
Mas você não alcança os usuários apenas enquanto eles estão dirigindo.
Você também alcança essas pessoas quando elas estão estacionadas.
Por exemplo, enquanto carregam o veículo em um eletroposto ou esperam na fila para buscar os filhos na escola.
E com o aumento das telas específicas para passageiros, esperamos ver ainda mais oportunidades no futuro para aumentar o engajamento com os usuários.
Certo.
Agora, vamos conferir os diferentes tipos de experiências que você pode criar para carros.
Para entender como criar para carros, é útil entender as duas principais situações e estados que existem para os apps quando eles estão em execução dentro de um veículo.
Primeiro, há apps que você usa enquanto dirige.
Essas são experiências otimizadas para direção que podem ser usadas enquanto o veículo está em movimento.
Isso inclui apps nas categorias listadas na tela, como apps de áudio, que geralmente chamamos de mídia, apps de mensagens e comunicação, navegação e assim por diante.
As experiências otimizadas para direção precisam seguir critérios rígidos de proteção contra distrações.
Há considerações especiais sobre como criar uma interface para um app que possa ser usada com segurança enquanto o veículo está em movimento.
Há algumas maneiras diferentes de criar apps otimizados para dirigir.
Mas, nesta palestra, vamos focar especificamente no uso da biblioteca de apps Car.
É um conjunto de bibliotecas do Jetpack que fornece uma estrutura modelada com interfaces do usuário otimizadas para a direção e, ao mesmo tempo, se adapta às várias configurações de hardware presentes nos carros.
Pense em modalidades de entrada, tamanhos de tela e proporções.
Embora essa não seja a única maneira de criar experiências otimizadas para dirigir em carros, o foco desta palestra é a criação com a biblioteca de apps Android para carros.
Costumamos chamar isso de CAL.
Como mencionei há pouco, a biblioteca Car App é um conjunto de bibliotecas que ajuda a criar apps para uso em veículos.
É uma estrutura modelada que fornece interfaces do usuário otimizadas para a direção e, ao mesmo tempo, se adapta a diferentes configurações de hardware.
Você pode criar seu app com a confiança de que ele vai funcionar bem em todas essas configurações diferentes, seja no Android Auto ou no Android Automotive OS.
Os apps criados com a CAL podem usar essa arquitetura de cliente host.
O app host, que é o próprio Android Auto ou o Google Automotive App Host no caso de carros com o Google integrado, é o renderizador do sistema.
Ele controla o que precisa ser mostrado ao usuário nas telas.
Portanto, como desenvolvedor de apps, você não desenha pixels.
Em vez disso, você alimenta os dados estruturados e o estado deles para os modelos da biblioteca de apps para carro.
Esse host recebe os dados e os exibe de forma segura, em conformidade com as normas de segurança, com um layout otimizado para evitar distrações.
Vamos dar uma olhada nas classes da CAL, o que você precisa estender para criar seu app, começando com o CarAppService.
Essa é uma subclasse do serviço do Android que serve como ponto de entrada para que aplicativos hospedados se comuniquem com apps clientes. O objetivo dela é criar instâncias de sessão com que o host interage.
A sessão é como uma instância de um app cliente em execução na tela do veículo.
Como outros componentes do Android, ela tem um ciclo de vida próprio que pode ser usado para inicializar e desmontar recursos usados durante a existência da instância da sessão.
Essa é uma relação de um para muitos entre o CarAppService e uma sessão.
Por exemplo, um CarAppService pode ter duas instâncias de sessão, uma para uma tela principal e outra para uma tela de cluster em apps de navegação compatíveis com telas de cluster.
Este é um exemplo disso, em que um carro tem uma tela principal e uma tela de cluster, cada uma associada a uma sessão dedicada. É assim que você, como desenvolvedor de apps, pode oferecer suporte a veículos com várias telas.
Em uma sessão, as instâncias de tela são responsáveis por gerar as interfaces do usuário renderizadas por apps host.
Essas interfaces do usuário são representadas por classes de modelo que modelam um tipo específico de layout, como uma grade ou uma lista.
Assim, cada sessão gerencia uma pilha de instâncias de tela que lidam com fluxos do usuário em diferentes partes do aplicativo. Assim como acontece com a sessão, uma tela tem um ciclo de vida próprio ao qual você pode se conectar.
Mas só porque o host está renderizando sua IU e você está usando modelos da biblioteca de apps para carros, não significa que você está muito limitado ou que não pode personalizar seu aplicativo.
Há uma grande variedade de modelos e componentes que você pode usar e combinar para ter a experiência que quiser.
Há modelos de uso geral, que podem ser usados por todos os tipos de apps na biblioteca de apps do carro, e modelos de uso especial, destinados a experiências no app específicas, como navegação ou pontos de interesse.
Mas antes de entrar em detalhes sobre como criar experiências otimizadas para dirigir, quero falar sobre a outra situação em que você pode executar aplicativos em carros: quando o carro está estacionado.
Há algumas categorias de aplicativos que só podem ser usadas quando o veículo está estacionado, como apps de vídeo, jogos e navegadores.
Mas quando o carro não está em movimento, as diretrizes de distração do motorista são suspensas, e você pode oferecer experiências mais alinhadas com sua interface adaptável atual.
Os apps estacionados são baseados em atividades e são semelhantes ou até iguais às atividades usadas em outros dispositivos, como smartphones ou tablets. Vamos falar sobre eles em detalhes na próxima seção.
Embora as experiências de apps para carros estacionados reutilizem atividades adaptáveis, ainda há diretrizes de qualidade específicas para carros que você precisa seguir, desde declarações de manifesto e cortes de tela até a pausa da reprodução quando o carro começa a se mover.
Para ajudar a automatizar esse trabalho, lançamos uma nova habilidade do Android para apps estacionados.
Antes de começar, instale a CLI do Android, que pode ser encontrada neste link curto.
Depois de configurar isso, execute android skills list para conferir as habilidades disponíveis.
android skills list
android skills add android-for-cars-parked-appsHá uma série de habilidades diferentes que você pode usar para levar seu desenvolvimento Android para o próximo nível.
E, especificamente para o Android para carros, use android skills add android-for-cars-parked-apps para adicionar a habilidade ao contexto do agente.
Agora, seja qual for seu agente de IA favorito, ele oferece orientações detalhadas para configurar o manifesto para o Android Auto ou o Android Automotive OS, processando as inserções de janela do carro e itens como navegação de retorno, aplicando restrições de reprodução para distração do motorista e até mesmo auditando seu app de vídeo, jogo ou navegador antes de enviá-lo ao Google Play.
Criar apps para carros também é um pouco diferente devido ao conceito dessas categorias de apps.
Como mencionei antes, existem algumas categorias de apps que podem ser usadas enquanto você dirige e outras que podem ser usadas enquanto o carro está estacionado.
As categorias destacadas são aquelas que podem ser usadas ao dirigir.
Algumas delas são indicadas com CAL, como mencionei, que é a biblioteca de apps Car App, e os apps nessa categoria usam modelos como os que vimos há pouco.
Agora, vou passar rapidamente por eles, sem entrar em muitos detalhes.
Começando com os apps de música, que reproduzem áudio, não vídeo.
Há duas maneiras de criá-los.
A de cima, indicada com MediaBrowserService, é a opção mais simples.
Você fornece metadados, enquanto a interface da tela de infoentretenimento cuida totalmente da renderização da interface de reprodução e do navegador de mídia de uma forma otimizada para carros.
A outra opção é criar apps de música usando a biblioteca de apps para carros, o que oferece mais controle e opções para personalizar o estilo e a apresentação dos apps de música. Thomas vai mostrar mais sobre isso em breve.
Os apps de navegação são, obviamente, um caso de uso importante, fornecendo rotas e navegação guiada.
Os apps de motoristas de transporte por aplicativo também se enquadram nessa categoria.
Os apps de pontos de interesse ajudam você a encontrar locais úteis por perto, como carregadores de VE ou vagas de estacionamento.
Os apps de Internet das Coisas (IoT) permitem que você acesse dispositivos inteligentes em qualquer lugar, por exemplo, para gerenciar sua casa.
Os apps de clima também estão disponíveis e podem mostrar radares em tempo real, alertas de tempestade e previsões específicas para cada local.
Por fim, a comunicação é dividida em três subcategorias: extensão de notificações básicas para o carro, apps de mensagens e apps de videochamada.
E há as categorias estacionadas: apps de streaming de vídeo, jogos e navegadores da Web.
E tenho o prazer de anunciar que, há algumas semanas, a publicação de jogos no Android Auto e no Android Automotive OS está disponível para todos os desenvolvedores.
Você vai notar que algumas dessas categorias estão marcadas como "Abertas", outras como "Em Beta" e outras como "Em breve".
"Aberto" significa que qualquer desenvolvedor pode enviar um app nessa categoria diretamente para produção.
"Beta" significa que, embora seja possível publicar em faixas internas ou fechadas, o app não pode ser publicado em produção, a menos que você seja aceito como parte de um programa de acesso antecipado.
A documentação de cada uma dessas categorias inclui mais informações e um link para nosso formulário de interesse.
E "Em breve" é para categorias que ainda não são compatíveis, mas que planejamos oferecer suporte no futuro.
No final das contas, nosso objetivo é unificar a plataforma.
Queremos que você possa criar e alcançar o máximo de pessoas possível escrevendo uma vez e distribuindo para o Android Auto e o Android Automotive OS, independente da categoria.
Agora, Thomas vai falar sobre mídia.
Até logo.
Ótimo.
Por isso, no ano passado, lançamos a biblioteca de apps Car App para apps de mídia na versão 1.8, trazendo interfaces de navegação com modelos e ações personalizadas para o Android Auto.
Isso inclui o modelo de reprodução de mídia mostrado à esquerda.
Este ano, no I/O, apresentamos mais interfaces navegáveis com a Biblioteca de Apps para Carros 1.9.
Com o lançamento da versão Beta da CAL 1.9, agora você pode acessar atualizações de recursos importantes no Auto e no Automotive OS.
Os destaques incluem a personalização da marca por meio da expressão do app, que permite ajustar tokens de cor e forma com layouts renderizados pelo host, mantendo as regras de segurança, além de novos componentes de interface, como seções de destaque, itens de lista condensados, ícones roláveis e um miniplayer persistente.
Além disso, a CAL 1.9 expande totalmente o suporte a modelos de mídia para o AAOS, promovendo uma verdadeira unificação de plataforma nos dois ecossistemas.
A próxima versão da Biblioteca de Apps para Carros (CAL, na sigla em inglês) será lançada em breve: CAL versão 10.
A versão 10 da CAL vai trazer modelos mais personalizados para apps de comunicação, oferecendo experiências de chamada mais robustas e personalizadas ao dirigir.
Também incluímos uma nova categoria de apps e modelos para apps, com experiências de conversa ao dirigir.
Por fim, ainda mais funcionalidades estão sendo desenvolvidas para facilitar as transições entre os modos de estacionamento e direção com os modelos da biblioteca de apps para carros.
Aguarde mais novidades em breve.
Com os recursos de estacionamento para dirigir usando a biblioteca Car App, seu app pode mudar de modo dinamicamente e mostrar conteúdo adaptável quando o carro estiver parado, além de voltar facilmente para os modelos da biblioteca Car App ao dirigir.
Os principais aplicativos incluem oferecer fluxos de autenticação personalizados quando você está parado ou ativar uma experiência dedicada de estacionamento, como streaming de podcasts em vídeo ou clipes de música.
Isso se integra diretamente ao modelo de reprodução de mídia.
Portanto, os veículos parados dão aos motoristas acesso completo à atividade nativa do Android no app, permitindo mídias avançadas, como streaming de vídeo.
Assim que o carro é colocado em marcha, as proteções contra distração são ativadas. Isso faz com que o app volte ao modelo de mídia da biblioteca de apps para carros, mantendo a reprodução de áudio em conformidade e sem interrupções.
Estamos em um momento de transformação para as experiências no carro.
Os apps de música querem ir além das interfaces tradicionais de navegação e reprodução para oferecer momentos mais ricos, imersivos e interativos para motoristas e passageiros.
Agora, vamos mostrar um exemplo de como adicionar uma atividade de vídeo nativa usando a biblioteca Media3 para começar a reprodução quando o carro estiver estacionado.
Para começar, conecte uma superfície de renderização de vídeo diretamente à instância de reprodução em segundo plano.
override fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}Você quer evitar instanciar um player de mídia separado dentro dessa atividade. Em vez disso, quer manter um ExoPlayer ou player de mídia central no serviço principal, como um serviço de biblioteca de mídia Media3, que lida com streams de áudio e vídeo.
Portanto, durante o movimento, quando nenhum serviço ativo está vinculado, o player decodifica apenas o áudio. No entanto, quando os motoristas abrem a atividade de vídeo ao estacionar, você quer anexar a superfície de renderização diretamente ao player de serviço.
Ao usar o Media3, o mediaController implementa o player de forma nativa, permitindo uma atribuição direta, como você vê aqui, playerView definido-- playerView.player definido diretamente para o mediaController.
Em seguida, registre seu ponto de entrada nativo usando ParkedOnlyOnClickListener.
val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()Esse wrapper fornece um acionador de intent na barra de cabeçalho da interface de reprodução de mídia.
Portanto, inclua uma ação para iniciar a reprodução do vídeo, envolvendo o listener de seleção em um ParkedOnlyOnClickListener.
No modo Dirigindo, esses toques são interceptados pelo app host, que mostra uma mensagem de segurança do sistema. Assim, não é possível acessar essa tela enquanto você dirige, mas, quando o veículo está estacionado, o callback aciona o startActivity em carContext para iniciar a Activity em tela cheia designada.
Lembre-se de que, nesses apps da biblioteca de apps Car App, é necessário sinalizar o destino do vídeo como distractionOptimized=false no manifesto para que o sistema operacional reconheça que esse é um fluxo de trabalho apenas para quando o carro estiver estacionado.
<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>Por fim, vamos ver o que acontece quando o motorista muda da posição de estacionamento para a de condução.
Se a atividade não for otimizada para distração e permanecer ativa enquanto o carro se move, o AAOS vai apresentar uma sobreposição de bloqueio do sistema que, basicamente, pede para você estacionar para continuar usando o app.
Para evitar essa tela bloqueada, nosso objetivo é retornar ao modelo de reprodução de mídia sem interromper o áudio.
Portanto, quando isRequiresDistractionOptimization for avaliado como verdadeiro aqui, basicamente vamos limpar a superfície de renderização de vídeo da sessão de mídia subjacente e chamar "finish" na atividade no Google Play, porque ela foi iniciada sobre a experiência do CAL. Ao final, ela retorna diretamente ao modelo de reprodução de mídia e continua a reprodução de áudio.
class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}Manter a reprodução de áudio sem interrupções é fundamental para uma ótima experiência do usuário. Por isso, ao manter a sessão de mídia ativa como um serviço em primeiro plano, o som continua sem interrupções durante essas mudanças de estado.
<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>Você também precisa substituir o onNewIntent na tela do CAL para capturar intents SHOW_MEDIA_PLAYBACK.
class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}Assim, sempre que os usuários interagirem com um widget de mídia do sistema do veículo na tela inicial dos carros, o link direto vai encaminhá-los diretamente para a visualização "Tocando agora" na biblioteca de apps para carros.
Portanto, validar essas transições durante o processo de desenvolvimento é muito simples.
É possível executar comandos adb no AAOS.
Nesse caso, seria emulate-driving-state drive ou emulate-driving-state park quando você quiser voltar para a atividade anterior.
Este é um exemplo que usa nosso novo app de mídia de exemplo do Media3 com a biblioteca Car App e reprodução de vídeo ao estacionar.
Confira isso no nosso estande de Android adaptável no andar de baixo e no nosso GitHub de car-samples em breve.
Os recursos de estacionar para dirigir estão disponíveis no Android Automotive OS para apps de música que já se integraram à biblioteca de acesso para carros (CAL, na sigla em inglês) para oferecer experiências mais robustas enquanto o veículo está estacionado.
Confira nossa documentação em breve em developer.android.com e mostre seu interesse em incluir esse recurso no seu app.
Paul.
Ótimo.
Obrigada, Thomas.
Antes de encerrar, quero compartilhar algumas formas de saber mais sobre o que vem por aí ainda este ano.
Como o Thomas mencionou, a CAL 1.9 está na versão Alfa.
Em breve, ele vai passar para a versão Beta.
E a CAL 1.10 vai entrar em alfa antes do fim do ano, para que você possa começar a avaliar as interfaces de conversação e os recursos mais recentes de comunicação e estacionamento para dirigir.
Por fim, como mencionei, estamos felizes em anunciar que os jogos estão disponíveis no Android Auto e no Android Automotive OS. Este é o momento perfeito para otimizar seus títulos para carros.
Para saber mais sobre os detalhes da implementação, consulte a documentação no guia "Criar jogos para carros".
Para saber mais sobre como adaptar seus jogos para carros e acompanhar as novidades e mudanças do Android para carros, acesse nossa página "Novidades".
Esperamos que você tenha visto como os carros e os usuários estão prontos para seus apps.
Você pode usar seus apps adaptáveis para criar experiências avançadas no modo estacionado e usar vários modelos da biblioteca Android for Cars App para criar experiências otimizadas para uma direção segura.
Antes de publicar, faça testes completos usando a unidade principal do computador, os emuladores, o AAOS em execução no Pixel Tablet ou o Firebase Test Lab.
Você já tem as habilidades necessárias para criar para esse ecossistema, e milhões de carros estão esperando seus apps. Então, vamos colocar esse app na estrada.
android skills list
android skills add android-for-cars-parked-appsoverride fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}