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úsica para carros pode oferecer uma maneira de os usuários conectarem as vidas digitais deles diretamente aos carros. Ao estender os mesmos apps para que sejam disponibilizados para automóveis, você cria uma melhor experiência do usuário. Você pode fazer isso fazendo a integração com o Android Auto ou o Android Automotive OS.

Apps Android para carros precisam evitar a distração do 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, seu app de música pode mostrar informações oportunas ao motorista somente quando elas são 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úsica permitem que os usuários procurem e escutem 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. Mais informações também estão disponíveis em Criar apps de música para carros.

Os apps de música 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 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 com visualizações ou o Compose. Para saber mais, 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 contém informações sobre o que você precisa fazer, incluindo links para outros recursos com orientações específicas.

Componentes de reprodução

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

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

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

Para saber mais, consulte Componentes de reprodução.

Implementar um MediaLibraryService e um MediaLibrarySession

Um MediaLibraryService fornece uma API padronizada para exibir 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úsica, já que essas plataformas oferecem a própria interface segura para motoristas para sua biblioteca de mídia. Para mais informações sobre como implementar e usar um MediaLibraryService, consulte Exibir conteúdo com MediaLibraryService.

Para os controles de mídia, 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 avise a reprodução de mídia externamente e receba comandos de fontes externas, como Android Auto, Android Automotive OS ou Google Assistente. Para saber mais, 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 para os seguintes comandos do player:

O guia Ativar controles de mídia descreve como personalizar esses controles 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(). 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 está tentando navegar em níveis mais profundos da sua biblioteca de conteúdo.

Essas plataformas impõem outros limites à forma como sua biblioteca de conteúdo é estruturada. Para ver detalhes sobre como personalizar a forma como a biblioteca de conteúdo é exibida, consulte Criar o serviço de navegação 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 seu 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 seu projeto, como o código usado no seu 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 atividades de 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 esta 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 nesse 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 o Android Auto e o Android Automotive OS, pode seguir outras etapas para otimizar o app para que ele seja usado com mais segurança enquanto você dirige. Para mais recomendações que garantam uma experiência do usuário segura e conveniente, consulte os guias técnicos sobre Ações por voz, Proteções de 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 estar ciente de 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. Você precisa seguir 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"/>