Integrar seu app de mídia ao Android para carros

Leve seu app para os veículos com o Android Auto ou o Android Automotive OS. Use uma arquitetura de app que funcione para os dois casos de maneira que todos os usuários possam aproveitar seu app.

O que é o Android para carros?

Um app de mídia para carros pode ser uma maneira de os usuários conectarem a vida digital ao veículo. Ao estender os mesmos apps para smartphones para serem usados em automóveis, você cria uma experiência de usuário melhor. Para fazer isso, faça a integração com o Android Auto ou o Android Automotive OS.

Os apps Android para carros precisam evitar distrair o motorista acima de tudo. É possível minimizar as distrações seguindo as práticas recomendadas, como o uso de comandos de voz e um design visual muito prático. Dessa forma, o app de música poderá mostrar informações oportunas ao motorista somente quando forem relevantes e usar padrões previsíveis para tarefas comuns.

Android Auto

O Android Auto oferece uma experiência de app otimizada para usuários que têm um smartphone Android com o app Android Auto e um sistema de som automotivo ou pós-venda compatível. Eles podem usar seu app diretamente na tela do carro conectando o smartphone. Ative o Android Auto para se conectar ao seu app para smartphone criando serviços que o Android Auto usa para mostrar uma interface otimizada para motoristas.

Android Automotive OS

O Android Automotive OS é um sistema de infoentretenimento do Android integrado aos veículos. O sistema do carro é um dispositivo Android autônomo otimizado para veículos. Com o Android Automotive OS, o usuário instala seu app diretamente no carro, e não no smartphone.

Categorias de apps compatíveis

Os apps de mídia permitem que os usuários procurem e toquem músicas, rádio, audiolivros e outros conteúdos de áudio no carro. Para mais informações, consulte Criar apps de reprodução de áudio para carros. Confira mais informações em Criar apps de mídia para carros.

Os apps de mídia são criados usando MediaLibraryService e MediaSession. No Android Automotive OS, você também pode criar telas de login e configurações (para uso enquanto o veículo está estacionado) usando visualizações ou o Compose.

Apps de vídeo permitem que os usuários assistam streaming de vídeos enquanto o carro está estacionado. O objetivo principal desses apps é mostrar streaming de vídeo. Esses apps são criados usando visualizações ou o Compose. Para ver mais informações, consulte Criar apps de reprodução de vídeo para o Android Automotive OS. Mais informações estão disponíveis em Criar apps de vídeo para o Android Automotive OS.

Criar apps de reprodução de áudio para carros

Este guia pressupõe que você já tenha um app básico de reprodução de mídia. Caso contrário, para começar, acesse Criar um app básico de player de mídia.

Este guia fornece informações sobre o que você precisa fazer, incluindo links para outros recursos com orientações específicas.

Componentes de reprodução

O Media3 oferece vários componentes importantes para casos de uso de reprodução. As classes que compõem esses componentes são familiares se você já trabalhou com bibliotecas de mídia anteriores do Android.

O diagrama a seguir demonstra como esses componentes se unem em um app típico.

Os diferentes componentes de um app de mídia que usa o Media3 se conectam
  de várias maneiras simples devido ao compartilhamento de interfaces
  e classes.
Figura 1: componentes de apps de mídia

Para mais informações, consulte Componentes de reprodução.

Implementar um MediaLibraryService e um MediaLibrarySession

Um MediaLibraryService oferece uma API padronizada para fornecer e permitir o acesso à sua biblioteca de mídia. Isso é necessário ao adicionar suporte para o Android Auto ou o Android Automotive OS ao seu app de mídia, já que essas plataformas oferecem a própria interface segura para o motorista na biblioteca de mídia. Para saber mais sobre como implementar e usar um MediaLibraryService, consulte Exibir conteúdo com a MediaLibraryService.

Para controles de reprodução, use uma sessão de mídia. A API MediaSession oferece uma maneira universal de interagir com um player de áudio ou vídeo. A biblioteca Jetpack Media3 inclui MediaLibrarySession, que estende MediaSession para adicionar APIs de navegação de conteúdo.

A conexão de uma sessão de mídia a um player permite que um app anuncie a reprodução de mídia externamente e receba comandos de reprodução de fontes externas, como o Android Auto, o Android Automotive OS ou o Google Assistente. Para mais informações, consulte Controlar e anunciar a reprodução usando uma MediaSession e Usar uma MediaLibrarySession.

No mínimo, sua sessão de mídia precisa declarar suporte aos seguintes comandos do player:

O guia Ativar controles de mídia descreve como personalizar os controles de mídia em carros.

Quando o Android Auto ou o Android Automotive OS se conectam ao seu app, eles solicitam uma biblioteca de conteúdo para exibição, o que aciona o método de callback onGetLibraryRoot(). É possível retornar rapidamente um item de mídia raiz para permitir o acesso à biblioteca. O método de callback onGetChildren() é chamado quando o Android Auto ou o Android Automotive OS estão tentando navegar em níveis mais profundos da biblioteca de conteúdo.

Essas plataformas aplicam outros limites sobre como a biblioteca de conteúdo é estruturada. Para saber como personalizar a exibição da biblioteca de conteúdo, consulte o guia Criar seu serviço de navegador de mídia.

Declarar suporte para o Android Auto

Use a seguinte entrada de manifesto para declarar que seu app de smartphone tem suporte ao Android Auto:

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Essa entrada de manifesto se refere a um arquivo XML que declara com quais recursos automotivos seu app é compatível. Para indicar que você tem um app de música, adicione um arquivo XML chamado automotive_app_desc.xml ao diretório res/xml/ no projeto. Esse arquivo precisa incluir o seguinte conteúdo:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Declarar compatibilidade com o Android Automotive OS

É necessário criar um módulo automotivo, já que nem toda a lógica do app pode ser compartilhada com um app automotivo. Alguns componentes do Android Automotive OS, como o manifesto, têm requisitos específicos da plataforma. Crie um módulo que possa manter o código desses componentes separado de outros códigos no projeto, como o código usado no app para dispositivos móveis.

Siga as etapas abaixo para adicionar um módulo automotivo ao seu projeto:

  1. No Android Studio, clique em File > New > New Module.
  2. Selecione Automotive Module e clique em Next.
  3. Preencha o campo Application/Library name. Esse é o nome do seu app que os usuários veem no Android Automotive OS.
  4. Preencha o campo Module name.
  5. Ajuste o Package name de acordo com o nome do seu app.
  6. Selecione API 28: Android 9.0 (Pie) como Minimum SDK e clique em Next.

    Todos os carros que oferecem suporte para o Android Automotive OS executam o Android 9 (nível 28 da API) ou uma versão mais recente. Portanto, a seleção desse valor abrange todos os carros compatíveis.

  7. Selecione No Activity e clique em Finish.

Depois de criar seu módulo no Android Studio, abra o AndroidManifest.xml no seu novo módulo automotivo:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

O elemento application tem algumas informações padrão do app, bem como um elemento uses-feature que declara suporte para o Android Automotive OS. Observe que não há atividades declaradas no manifesto.

Se você implementar configurações ou login, adicione-as aqui. Essas atividades são acionadas pelo sistema usando intents explícitas e são as únicas atividades declaradas no manifesto para seu app Android Automotive OS.

Depois de adicionar qualquer atividade de configurações ou login, conclua o arquivo de manifesto definindo o atributo android:appCategory="audio" no elemento application e adicionando os seguintes elementos uses-feature:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

Definir explicitamente esses recursos como required="false" garante que o app não entre em conflito com os recursos de hardware disponíveis nos dispositivos Automotive OS.

Use a seguinte entrada de manifesto para declarar que o app oferece suporte ao Android Automotive OS:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Essa entrada de manifesto se refere a um arquivo XML que declara a quais recursos automotivos seu app oferece suporte.

Para indicar que você tem um app de música, adicione um arquivo XML chamado automotive_app_desc.xml ao diretório res/xml/ no projeto. Inclua o seguinte conteúdo neste arquivo:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

Filtros de intent

O Android Automotive OS usa intents explícitas para acionar atividades no seu app de mídia. Não inclua atividades que tenham filtros de intent CATEGORY_LAUNCHER ou ACTION_MAIN no arquivo de manifesto.

Atividades como a do exemplo a seguir geralmente são destinadas a um smartphone ou outro dispositivo móvel. Declare essas atividades no módulo que cria o app para smartphones, não no módulo que cria o app Android Automotive OS.

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

Outras etapas

Agora que você tem um app para Android Auto e Android Automotive OS, é recomendável seguir outras etapas para otimizar o app para que ele seja usado com mais segurança enquanto o carro está em movimento. Para mais recomendações que ajudam a garantir uma experiência do usuário segura e conveniente, consulte os guias técnicos para Ações por voz, Proteções contra distrações e Tratamento de erros.

Criar apps de reprodução de vídeo para o Android Automotive OS

Como os apps de vídeo são categorizados separadamente dos apps de mídia em carros, é necessário conhecer alguns requisitos específicos para apps de vídeo, conforme descrito em Criar apps do Android Automotive OS para carros estacionados e Criar apps de vídeo para o Android Automotive OS. Siga as instruções abaixo.

Marcar como um app de vídeo

Para indicar que o app oferece suporte a vídeo, adicione um arquivo XML chamado automotive_app_desc.xml ao diretório res/xml/ no projeto. Nesse arquivo, inclua o seguinte conteúdo:

<automotiveApp>
    <uses name="video"/>
</automotiveApp>

Em seguida, no elemento application do manifesto, adicione o seguinte elemento meta-data que referencia o arquivo XML:

<meta-data android:name="com.android.automotive"
    android:resource="@xml/automotive_app_desc"/>