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 oferecer uma maneira para os usuários conectarem a vida digital aos carros de forma integrada. Ao estender os mesmos apps para smartphones e disponibilizá-los para automóveis, você cria uma experiência melhor para o usuário. Para fazer isso, integre o app ao Android Auto ou ao Android Automotive 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ídia pode mostrar informações corretas ao motorista somente quando elas forem relevantes e usar padrões previsíveis para tarefas comuns.

Android Auto

O Android Auto oferece uma experiência de app otimizada para motoristas que têm um smartphone Android com o app Android Auto e um carro ou sistema de som automotivo 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 exibir 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ádios, audiolivros e outros conteúdos de áudio no carro. Para mais informações, consulte Criar apps de reprodução de áudio para carros. Para mais informações, consulte 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 Views ou Compose. Para 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, acesse Criar um app player de mídia básico para começar.

Este guia informa 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 principais 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 do Android anteriores.

O diagrama a seguir mostra 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 do app de mídia

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

Implementar um MediaLibraryService e um MediaLibrarySession

Um MediaLibraryService fornece uma API padronizada para veicular e permitir o acesso à sua biblioteca de mídia. Isso é necessário ao adicionar suporte para Android Auto ou Android Automotive OS ao seu app de mídia, já que essas plataformas oferecem uma interface segura para o motorista para sua biblioteca de mídia. Para mais informações sobre como implementar e usar um MediaLibraryService, consulte Disponibilizar conteúdo com 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.

Ao conectar uma sessão de mídia a um player, um app pode anunciar a reprodução de mídia externamente e receber comandos de reprodução de fontes externas, como Android Auto, Android Automotive OS ou 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 as maneiras de 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 exibir, o que aciona o método de callback onGetLibraryRoot(). Você pode retornar rapidamente um item de mídia raiz para permitir o acesso à sua biblioteca. O método de callback onGetChildren() é chamado quando o Android Auto ou o Android Automotive OS tentam navegar por níveis mais profundos da biblioteca de conteúdo.

Essas plataformas impõem outros limites à estrutura da sua biblioteca de conteúdo. Para detalhes sobre como personalizar a exibição da biblioteca de conteúdo, consulte o guia Criar seu serviço de navegador de mídia.

Declarar suporte ao 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 do restante do seu programa, 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 atividades de 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 é compatível com o 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ídia, 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, talvez queira tomar outras medidas para otimizar o app e torná-lo mais seguro para uso ao dirigir. 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 de voz, proteções contra distração 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, você precisa conhecer alguns requisitos específicos para apps de vídeo, conforme descrito em Criar apps 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>

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