Crea app parcheggiate per il sistema operativo Android Automotive

Oltre a supportare le app progettate per l'utilizzo alla guida, il sistema operativo Android Automotive supporta browser, giochi e app video da usare quando il veicolo è parcheggiato. Puoi inviare la stessa app alle auto come faresti con altri dispositivi con schermo di grandi dimensioni con solo alcune piccole modifiche.

Testa la tua app esistente su un emulatore Android Automotive OS

Per iniziare a creare la tua app per Android Automotive OS, prova prima la tua app esistente su un emulatore Android Automotive OS. Per configurare un emulatore, segui i passaggi descritti in Eseguire test utilizzando l'emulatore Android Automotive OS. Puoi quindi eseguire l'app seguendo le istruzioni riportate in Eseguire l'app sull'emulatore.

Quando esegui l'app, controlla la presenza di problemi di compatibilità, ad esempio:

  • Gli schermi di infotainment hanno orientamenti fissi. Per rispettare le norme sulla qualità delle app per auto, le app devono supportare gli orientamenti verticale e orizzontale.
  • Le API disponibili su altri dispositivi potrebbero non essere disponibili su Android Automotive OS. Ad esempio, alcune API di Google Play Services non sono disponibili su Android Automotive OS. Consulta la sezione Disattivare le funzionalità per maggiori dettagli su come gestire questi problemi.

Configura i file manifest dell'app

Per scegliere come target i dispositivi con sistema operativo Android Automotive, la tua app deve avere determinate voci del file manifest. Dopo aver attivato la distribuzione per i dispositivi con sistema operativo Android Automotive, le app compatibili vengono sottoposte a una procedura di revisione manuale per garantire che siano sicure per l'utilizzo in auto. Per ulteriori dettagli, vedi Distribuire su auto.

Funzionalità di Android Automotive OS richieste

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

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

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 radice <manifest>:

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

Impostare esplicitamente queste funzionalità come non obbligatorie consente di garantire che la tua app non entri 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 la tua app sia disponibile solo per l'utilizzo quando il veicolo è parcheggiato, non includere il seguente elemento <meta-data> in nessun elemento <activity> all'interno del 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à di guida per ridurre le distrazioni per il conducente. Questo avviene come callback del ciclo di vita onPause durante il quale devi mettere in pausa sia la riproduzione video sia quella audio dall'app.

Voci manifest specifiche per categoria

Oltre ai requisiti precedenti, che si applicano a tutte le app non pubblicate, le categorie Video e Giochi hanno requisiti aggiuntivi:

Ottimizzare l'app per Android Automotive OS

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

Ottimizzazione per schermi di grandi dimensioni

Gli schermi presenti nei veicoli con sistema operativo Android Automotive sono più simili per dimensioni, risoluzione e proporzioni a tablet e dispositivi pieghevoli rispetto agli smartphone. Di conseguenza, l'ottimizzazione dell'app per gli schermi di grandi dimensioni è vantaggiosa anche per gli utenti in auto.

In particolare, consulta le guide Supporta schermi di dimensioni diverse e Esegui la migrazione della UI ai layout adattabili per informazioni dettagliate su come sfruttare al meglio i display di grandi dimensioni, nonché le gallerie di contenuti multimediali e giochi per trovare ispirazione e indicazioni per il design.

Altre ottimizzazioni per schermi di grandi dimensioni, come la compatibilità con gli input, non sono così vantaggiose direttamente 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 con il controllo rotativo, pertanto eventuali ottimizzazioni apportate possono essere vantaggiose per entrambi i fattori di forma.

Lavorare con inserti di finestre e ritagli del display

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

Per impostazione predefinita, le app vengono disegnate in un'area che non si sovrappone alle barre di sistema o ai ritagli del display. Tuttavia, potresti voler nascondere le barre di sistema nell'app, disegnare contenuti dietro di esse o mostrare contenuti in un ritaglio del display come descritto in Disporre l'app all'interno degli inserti della finestra. Se la tua app esegue una di queste operazioni, consulta le seguenti sottosezioni per informazioni dettagliate su come farla funzionare correttamente nell'ecosistema dei dispositivi Android Automotive OS.

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

Le barre di sistema nelle auto potrebbero avere dimensioni e posizionamenti diversi rispetto ad altri fattori di forma. Ad esempio, le barre di navigazione possono essere posizionate a sinistra, a destra o in basso nella schermata. Anche se è presente una barra di stato in alto e una barra di navigazione in basso (come nella maggior parte di smartphone e tablet), le dimensioni di questi elementi saranno probabilmente molto maggiori nelle auto.

Inoltre, il sistema operativo Android Automotive consente agli OEM di controllare se le app possono mostrare o nascondere le barre di sistema per entrare ed uscire dalla modalità immersiva. Ad esempio, impedendo alle app di nascondere le barre di sistema, gli OEM possono assicurarsi che i controlli del veicolo, come quelli climatici, 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 è riuscita a modificare gli rientramenti.

Analogamente, gli OEM possono anche controllare se le app possono impostare o meno il colore e la translucenza delle barre di sistema per assicurarsi che le barre e gli elementi al loro interno siano sempre ben visibili. Se la tua app viene visualizzata da un lato all'altro dello schermo, verifica che dietro le barre di sistema vengano visualizzati solo contenuti non critici. Questi contenuti potrebbero non essere visibili se l'OEM del dispositivo impedisce di impostare il colore o la trasparenza 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 è da un bordo all'altro, non fare supposizioni sulle dimensioni, sul numero, sul tipo o sulla posizione delle barre di sistema. Utilizza invece le API di incavo della finestra per disporre i contenuti della tua app in base alle barre di sistema. Per ulteriori dettagli su come utilizzare queste API, consulta Mostrare i contenuti a schermo intero nella tua app. I valori di spaziatura hardcoded che, anche se mai consigliati, potrebbero mantenere i contenuti nell'area sicura su altri dispositivi probabilmente non funzioneranno nelle auto.

Adattarsi a display di forma irregolare

Oltre ai display rettangolari, alcuni veicoli potrebbero avere schermi di forma irregolare, come mostrato nella Figura 1:

Un 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 delimitante del ritaglio della visualizzazione della curva.

Se la tua app non viene visualizzata a schermo intero, non devi fare nulla per visualizzarla nell'area sicura.

Se l'app viene visualizzata a schermo intero, puoi scegliere come deve comportarsi rispetto ai ritagli del display. Puoi farlo utilizzando le risorse impostando l'attributo android:windowLayoutInDisplayCutoutMode per il tema dell'app o in fase di esecuzione modificando l'attributo layoutInDisplayCutoutMode della finestra.

Poiché i tipi di ritagli del display 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, il cui comportamento è ottimizzato per i ritagli presenti sui dispositivi mobili. Utilizza invece LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER o LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS per evitare sempre o inserire sempre il ritaglio. Se scegli la seconda opzione, consulta Supportare i ritagli del display per ulteriori dettagli sulle API relative ai ritagli del display.

Se la tua app viene visualizzata nell'area del ritaglio del display e vuoi avere un comportamento diverso tra il sistema operativo Android Automotive e il mobile, consulta Disattivare le funzionalità per indicazioni se la tua app imposta questo comportamento in fase di esecuzione e Utilizzare risorse alternative se la tua app imposta questo comportamento utilizzando i file di risorse.

Disattivare le funzionalità

Se rendi disponibile un'app mobile esistente su Android Automotive OS, alcune funzionalità potrebbero non essere pertinenti o disponibili. Ad esempio, le auto in genere non forniscono l'accesso alle videocamere. Inoltre, solo un insieme limitato di Google Play Services è disponibile sul sistema operativo Android Automotive. 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 controllando 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 ha anche un componente Android Auto, puoi utilizzare l'API CarConnection della raccolta di app Android for Cars per rilevare se l'app è in esecuzione su Android Automotive OS o Android Auto oppure se non è collegata a un'auto.

Per la modalità Picture-in-Picture (PiP), segui le best practice stabilite per verificare se la funzionalità è disponibile e reagisci di conseguenza.

Gestire gli scenari offline

Anche se le auto sono sempre più connesse a internet, è consigliabile che le app gestiscano l'esecuzione senza una connessione a internet, ad esempio nei seguenti casi:

  • Gli utenti potrebbero disattivare i dati mobili offerti nell'ambito di un pacchetto di abbonamento del produttore di auto.
  • L'accesso ai dati mobili potrebbe essere limitato in alcune aree.
  • Le auto con radio Wi-Fi potrebbero non essere coperte dal segnale Wi-Fi oppure un OEM potrebbe disattivare il Wi-Fi a favore di una rete mobile.

Preparati a gestire questi scenari nella tua app con un degradamento graduale della funzionalità che dipende dall'accesso a internet, ad esempio offrendo contenuti offline. Per saperne di più, consulta le best practice per l'ottimizzazione della rete.

Utilizzare risorse alternative

Per adattare la tua app alle auto, puoi utilizzare il qualificatore della risorsa car per fornire risorse alternative quando l'app viene eseguita su un veicolo con sistema operativo Android Automotive. Ad esempio, se utilizzi risorse dimensione per memorizzare valori di spaziatura interna, puoi utilizzare un valore più elevato per il set di risorse car per aumentare gli obiettivi di contatto.

Distribuire l'app

Dopo aver testato la tua app in base alle norme sulla qualità delle app per auto per la relativa categoria, puoi usarla su Google Play per distribuirla ad Auto con Google integrato. Per ulteriori dettagli sulla procedura di pubblicazione, consulta Distribuire su auto.

Fornire feedback sulle app inutilizzate

Se riscontri un problema o hai una richiesta di funzionalità durante lo sviluppo della tua app per auto parcheggiata per il sistema operativo Android Automotive, puoi segnalarla utilizzando il tracker dei problemi di Google. Assicurati di compilare tutte le informazioni richieste nel modello del problema. Prima di segnalare un nuovo problema, controlla se è già stato segnalato nell'elenco dei problemi. Puoi registrarti e votare per i problemi facendo clic sulla stella accanto al problema nel tracker. Per ulteriori informazioni, consulta la sezione Iscriversi a un problema.

Creare un nuovo problema