Crea app parcheggiate per il sistema operativo Android Automotive

Oltre a supportare le app create per l'uso durante la guida, il sistema operativo Android Automotive supporta browser, giochi e app di video da utilizzare quando il veicolo è parcheggiato. Puoi inviare alle auto la stessa app così come faresti con altri dispositivi con schermi grandi con poche modifiche di minore entità.

Testa la tua app esistente su un emulatore del sistema operativo Android Automotive

Per iniziare a creare la tua app per il sistema operativo Android Automotive, testa innanzitutto l'app esistente su un emulatore di sistema operativo Android Automotive. Per configurare un emulatore, segui i passaggi descritti in Eseguire test utilizzando l'emulatore del sistema operativo Android Automotive. Dopodiché potrai eseguire l'app seguendo le istruzioni in Eseguire l'app nell'emulatore.

Quando esegui la tua app, verifica la presenza di problemi di compatibilità, quali i seguenti:

  • Le schermate di infotainment hanno orientamenti fissi. Per rispettare le norme sulla qualità delle app per auto, le app devono supportare sia l'orientamento verticale che quello orizzontale.
  • Le API disponibili su altri dispositivi potrebbero non essere disponibili sul sistema operativo Android Automotive. Ad esempio, alcune API di Google Play Services non sono disponibili sul sistema operativo Android Automotive. Per informazioni dettagliate su come gestire questi problemi, consulta la sezione Disattivare le funzionalità.

Configura i file manifest dell'app

Per scegliere come target il sistema operativo Android Automotive, la tua app deve avere determinate voci del file manifest. Le app che hanno come target il sistema operativo Android Automotive vengono inviate al Play Store utilizzando un tipo di release del sistema operativo Automotive separato. Vengono sottoposti a una procedura di revisione manuale per garantire che siano sicuri per l'uso in auto. Per ulteriori dettagli, vedi Distribuire app Android per le auto.

Funzionalità richieste del sistema operativo Android Automotive

Per essere elencate nel Play Store in un'auto, le app create per il sistema operativo Android Automotive devono includere il seguente elemento <uses-feature> nel file AndroidManifest.xml:

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

Le app inviate a canali non automobilistici non possono dichiarare l'elemento <uses-feature> mostrato nell'esempio di codice precedente, perché non possono dipendere da hardware specifico per auto. Di conseguenza, per distribuire la stessa app sia per i dispositivi auto che per quelli non automobilistici, devi generare almeno due versioni dell'app: uno per i dispositivi automobilistici e un altro per quelli mobili. Per saperne di più su come creare queste versioni distinte, consulta la seguente documentazione:

Le due versioni dell'app possono condividere lo stesso nome di pacchetto, ma devono avere codici di versione diversi poiché vengono caricati separatamente nei canali del Play Store.

In alternativa, invece di utilizzare versioni diverse, puoi usare nomi di pacchetto distinti per gli app bundle o gli APK per dispositivi mobili e auto e motori. Per comprendere i vantaggi di ciascun approccio, consulta la sezione Nomi dei pacchetti nella guida per gli sviluppatori di app multimediali.

Oltre all'elemento mostrato nell'esempio di codice precedente, le app create per il sistema operativo Android Automotive devono includere i seguenti elementi <uses-feature> nell'elemento <manifest> principale:

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

L'impostazione esplicita di queste funzionalità su Non obbligatoria aiuta a garantire che l'app non sia in conflitto con le funzionalità hardware disponibili nei dispositivi con sistema operativo Android Automotive.

Assicurati che non ci siano attività ottimizzate per le distrazioni

Per assicurarti che l'app possa essere usata soltanto quando è parcheggiata, non includere il seguente elemento <meta-data> in nessun elemento <activity> del file manifest:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Senza questi metadati, le attività della tua app vengono bloccate automaticamente dal sistema operativo quando l'auto entra in modalità Auto, per ridurre le distrazioni per il conducente. Si tratta di un callback del ciclo di vita onPause, durante il quale devi mettere in pausa la riproduzione audio e video dell'app.

Ottimizza la tua app per il sistema operativo Android Automotive

Per offrire agli utenti la migliore esperienza possibile, tieni presente quanto segue durante la creazione dell'app per il sistema operativo Android Automotive.

Ottimizza per schermi grandi

Gli schermi presenti nei veicoli con sistema operativo Android Automotive sono più simili per dimensioni, risoluzione e proporzioni ai tablet e ai pieghevoli che agli smartphone. Pertanto, l'ottimizzazione dell'app per schermi di grandi dimensioni è vantaggiosa anche per gli utenti che utilizzano le auto.

In particolare, consulta le guide Supporto di schermi di dimensioni diverse e Eseguire la migrazione dell'interfaccia utente ai layout adattabili per i dettagli su come ottenere il massimo da display di grandi dimensioni, nonché le galleria di contenuti multimediali e giochi per trovare ispirazione e indicazioni per il design.

Altre ottimizzazioni dello schermo di grandi dimensioni, come la compatibilità dell'input, non sono vantaggiose per il sistema operativo Android Automotive, ma possono comunque migliorare l'esperienza utente. Ad esempio, la navigazione da tastiera utilizza le stesse API della navigazione rotatoria, pertanto le ottimizzazioni apportate possono trarre vantaggio da entrambi i fattori di forma.

Lavorare con riquadri di finestre e ritagli di visualizzazione

Come per altri fattori di forma, il sistema operativo Android Automotive include elementi dell'interfaccia utente di sistema, come le barre di stato e di navigazione, e supporta i display non rettangolari.

Per impostazione predefinita, le app disegnano in un'area che non si sovrappone alle barre di sistema o mostra i ritagli. Tuttavia, potresti volere che l'app nasconda le barre di sistema, disegna contenuti dietro di esse o mostri i contenuti in un ritaglio display come descritto in Configurare l'app all'interno di riquadri di finestre. Se la tua app esegue queste operazioni, consulta le sottosezioni seguenti per dettagli su come far funzionare correttamente la tua app in tutto l'ecosistema dei dispositivi del sistema operativo Android Automotive.

Barre di sistema, modalità immersiva e rendering edge-to-edge

Le barre di sistema delle auto potrebbero avere dimensioni e posizioni diverse rispetto ad altri fattori di forma. Ad esempio, le barre di navigazione possono essere posizionate a sinistra, a destra o in basso sullo schermo. Anche se nella parte superiore sono presenti una barra di stato e una barra di navigazione in basso (come nel caso della maggior parte dei telefoni e tablet), le dimensioni di questi elementi saranno probabilmente molto maggiori nelle auto.

Inoltre, il sistema operativo Android Automotive consente agli OEM di stabilire se le app possono mostrare o nascondere le barre di sistema per attivare e disattivare la modalità immersiva. Ad esempio, impedendo alle app di nascondere le barre di sistema, gli OEM possono garantire che i controlli del veicolo, come i climatizzatori, siano sempre accessibili sullo schermo. Se un OEM ha impedito alle app di controllare le barre di sistema, non succede nulla quando un'app chiama le API WindowInsetsController (o WindowInsetsControllerCompat) per mostrare o nascondere le barre di sistema. Consulta la documentazione di show e hide per scoprire di più su come rilevare se la tua app è stata in grado di modificare gli inset.

Allo stesso modo, gli OEM possono anche stabilire se le app possono impostare o meno il colore e la trasparenza delle barre di sistema per garantire che queste ultime e gli elementi al loro interno siano sempre chiaramente visibili. Se l'app utilizza un approccio edge-to-edge, controlla che dietro le barre di sistema siano tracciati solo i contenuti non critici. Questi contenuti potrebbero non essere visibili se l'OEM del dispositivo impedisce di impostare il colore o la traslucenza delle barre.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Se la tua app adotta un approccio edge-to-edge, non dare ipotesi sulle dimensioni, sul numero, sul tipo o sulla posizione delle barre di sistema. Piuttosto, puoi utilizzare le API integrate nelle finestre per disporre i contenuti dell'app in relazione alle barre di sistema. Per ulteriori dettagli su come utilizzare queste API, consulta Visualizzare i contenuti a livello perimetrale nell'app. Valori di spaziatura interna hardcoded che, sebbene non siano mai consigliati, potrebbero mantenere i contenuti nell'area sicura su altri dispositivi che probabilmente non si trovano nelle auto.

Adatta i display a display di forma irregolare

Oltre a display rettangolari, alcuni veicoli potrebbero avere schermi di forma irregolare, come quelli mostrati nella Figura 1:

Diagramma di un dispositivo con sistema operativo Android Automotive con un display curvo sul lato destro.
Figura 1: un dispositivo con sistema operativo Android Automotive con un display curvo sul lato destro. L'area verde è il rettangolo sicuro che non si sovrappone al riquadro di delimitazione del ritaglio visualizzato della curva.

Se la tua app non esegue il rendering da un lato all'altro, non devi fare nulla per farlo all'interno dell'area di sicurezza.

Se la tua app esegue il rendering da bordo a bordo, puoi scegliere come deve comportarsi rispetto ai ritagli di visualizzazione. Puoi farlo utilizzando le risorse impostando l'attributo android:windowLayoutInDisplayCutoutMode per il tema dell'app oppure in fase di runtime modificando l'attributo layoutInDisplayCutoutMode della finestra.

Poiché i tipi di ritagli di visualizzazione presenti sui dispositivi con sistema operativo Android Automotive sono diversi da quelli sui dispositivi mobili, non utilizzare LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT o LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, che hanno un comportamento ottimizzato per i ritagli presenti sui dispositivi mobili. Utilizza LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER o LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS per evitare o inserire sempre il ritaglio. Quando scegli la seconda opzione, consulta Supporto dei ritagli di visualizzazione per ulteriori dettagli sulle API relative ai ritagli di visualizzazione.

Se la tua app esegue il rendering nell'area di ritaglio della visualizzazione e vuoi avere un comportamento diverso tra il sistema operativo Android Automotive e quello per dispositivi mobili, consulta Disattivare funzionalità per istruzioni se la tua app imposta questo comportamento in fase di runtime e Utilizza risorse alternative se l'app imposta questo comportamento utilizzando file di risorse.

Disattivare le funzionalità

Se stai rendendo disponibile un'app mobile esistente sul sistema operativo Android Automotive, alcune funzionalità e funzionalità potrebbero non essere pertinenti o disponibili. Ad esempio, generalmente le auto non hanno accesso alle fotocamere. Inoltre, sul sistema operativo Android Automotive è disponibile solo un sottoinsieme di Google Play Services. Per ulteriori dettagli, consulta Google Play Services per le auto.

Puoi utilizzare l'API PackageManager.hasSystemFeature per rilevare se l'app è in esecuzione sul sistema operativo Android Automotive verificando la funzionalità FEATURE_AUTOMOTIVE, come mostrato nell'esempio seguente:

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

In alternativa, se la tua app dispone anche di un componente Android Auto, puoi usare l'API CarConnection della libreria di app Android for Cars per rilevare se l'app funziona sul sistema operativo Android Automotive o Android Auto o se non è connessa a un'auto.

Per Picture in picture (PIP), segui le best practice stabilite per verificare se la funzionalità è disponibile e reagire in modo appropriato.

Gestire scenari offline

Anche se le auto stanno diventando sempre più connesse a internet, consigliamo di gestire le app senza una connessione a internet, come nei seguenti casi:

  • Gli utenti potrebbero disattivare i dati mobili offerti nell'ambito di un pacchetto di abbonamento del costruttore dell'auto.
  • L'accesso ai dati mobili potrebbe essere limitato in determinate aree.
  • Le auto con radio Wi-Fi potrebbero essere fuori dal raggio d'azione del Wi-Fi oppure un OEM potrebbe disattivare il Wi-Fi per favore di una rete mobile.

Preparati a gestire questi scenari nella tua app riducendo agevolmente le funzionalità che dipendono dall'accesso a internet, ad esempio offrendo contenuti offline. Per ulteriori informazioni, consulta le best practice per l'ottimizzazione del networking.

Utilizza risorse alternative

Per adattare la tua app alle auto, puoi utilizzare il qualificatore risorsa car per fornire risorse alternative durante l'esecuzione su un veicolo con sistema operativo Android Automotive. Ad esempio, se utilizzi le Risorse di dimensione per archiviare i valori di spaziatura interna, puoi utilizzare un valore maggiore per il set di risorse car al fine di aumentare i touch target.

Distribuire l'app

Dopo aver testato l'app in base alle norme sulla qualità delle app per auto per la sua categoria e averne eseguito una build del sistema operativo Android Automotive con le eventuali modifiche necessarie per la categoria, puoi pubblicarla per i canali dei fattori di forma del sistema operativo Automotive sul Play Store. Per ulteriori dettagli sul processo di pubblicazione, vedi Distribuzione di app Android per le auto.

Inviare feedback sulle app parcheggiate

Se riscontri un problema o richiedi una funzionalità durante lo sviluppo dell'app parcheggiata per il sistema operativo Android Automotive, puoi segnalarla utilizzando lo strumento Issue Tracker di Google. Assicurati di compilare tutte le informazioni richieste nel modello del problema. Prima di segnalare un nuovo problema, controlla se è già presente nell'elenco dei problemi. Puoi abbonarti e votare i problemi facendo clic sulla stella che indica un problema nel tracker. Per ulteriori informazioni, consulta la sezione Iscrizione a un problema.

Crea un nuovo problema