Il sistema operativo Android Automotive consente agli utenti di installare app nell'auto. Per raggiungere gli utenti su questa piattaforma, devi distribuire un'app ottimizzata per il conducente compatibile con il sistema operativo Android Automotive. Puoi riutilizzare quasi tutto il codice e le risorse nell'app Android Auto, ma devi creare una build separata che soddisfi i requisiti indicati in questa pagina.
Panoramica dello sviluppo
L'aggiunta del supporto del sistema operativo Android Automotive richiede solo pochi passaggi, come descritto nelle sezioni seguenti:
- Attiva le funzionalità relative ad auto e motori in Android Studio.
- Crea un modulo Automotive.
- Aggiorna le dipendenze Gradle.
- (Facoltativo) Implementa impostazioni e attività di accesso.
- (Facoltativo) Lettura dei suggerimenti dell'host multimediale.
Considerazioni sul design
Il sistema operativo Android Automotive si occupa del layout dei contenuti multimediali che riceve dal servizio browser di contenuti multimediali della tua app. Ciò significa che l'app non traccia l'interfaccia utente e non avvia alcuna attività quando un utente attiva la riproduzione di contenuti multimediali.
Se implementi impostazioni o attività di accesso, queste attività devono essere ottimizzate per il veicolo. Consulta le linee guida sulla progettazione del sistema operativo Android Automotive durante la progettazione di queste aree dell'app.
Configura il progetto
Devi configurare diverse parti del progetto della tua app per abilitare il supporto del sistema operativo Android Automotive.
Attivare le funzionalità relative ad auto e motori in Android Studio
Utilizza Android Studio 4.0 o versioni successive per assicurarti che tutte le funzionalità del sistema operativo Automotive siano abilitate.
Crea un modulo Auto e motori
Alcuni componenti del sistema operativo Android Automotive, ad esempio il file manifest, hanno requisiti specifici della piattaforma. Crea un modulo che possa mantenere il codice di questi componenti separato dall'altro codice del progetto, ad esempio il codice utilizzato per l'app per telefono.
Per aggiungere un modulo relativo ad auto e motori al tuo progetto, segui questi passaggi:
- In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
- Seleziona Modulo auto, poi fai clic su Avanti.
- Inserisci un Nome applicazione/libreria. Questo è il nome della tua app che gli utenti vedranno per il sistema operativo Android Automotive.
- Inserisci un Nome modulo.
- Modifica il Nome del pacchetto in modo che corrisponda a quello dell'app.
Seleziona API 28: Android 9.0 (Pie) per SDK minimo, quindi fai clic su Avanti.
Tutte le auto che supportano il sistema operativo Android Automotive eseguono Android 9 (livello API 28) o versioni successive, quindi la selezione di questo valore ha come target tutte le auto compatibili.
Seleziona Nessuna attività e fai clic su Fine.
Dopo aver creato il modulo in Android Studio, apri AndroidManifest.xml
nel nuovo modulo Automotive:
<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>
L'elemento application
contiene alcune informazioni standard sull'app e un elemento uses-feature
che dichiara il supporto del sistema operativo Android Automotive. Tieni presente che non ci sono attività dichiarate nel manifest.
Se implementi impostazioni o attività di accesso, aggiungile qui. Queste attività vengono attivate dal sistema utilizzando intent espliciti e sono le uniche attività dichiarate nel manifest per l'app del sistema operativo Android Automotive.
Dopo aver aggiunto impostazioni o attività di accesso, completa il file manifest impostando l'attributo android:appCategory="audio"
nell'elemento application
e aggiungendo i seguenti elementi 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>
L'impostazione esplicita di queste funzionalità su required="false"
garantisce che
la tua app non entri in conflitto con le funzionalità hardware disponibili nei dispositivi
OS Automotive.
Dichiara il supporto dei contenuti multimediali per il sistema operativo Android Automotive
Utilizza la seguente voce del manifest per dichiarare che la tua app supporta il sistema operativo Android Automotive:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Questa voce del manifest fa riferimento a un file XML che dichiara le funzionalità del settore auto e motori supportate dalla tua app.
Per indicare che hai un'app multimediale, aggiungi un file XML denominato automotive_app_desc.xml
alla directory res/xml/
del tuo progetto. Includi nel file i seguenti contenuti:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Filtri per intent
Il sistema operativo Android Automotive utilizza intent espliciti per attivare attività nella tua app multimediale. Non includere attività che hanno filtri di intent CATEGORY_LAUNCHER
o ACTION_MAIN
nel file manifest.
Attività come quella nell'esempio seguente di solito hanno come target un telefono o un altro dispositivo mobile. Dichiara queste attività nel modulo che crea l'app Telefono, non nel modulo che crea l'app per il sistema operativo Android Automotive.
<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>
Aggiorna le dipendenze Gradle
Ti consigliamo di conservare il servizio di browser di contenuti multimediali in un modulo separato da condividere tra l'app per telefono e il modulo per il settore auto e motori. Se utilizzi questo approccio, devi aggiornare il modulo relativo ad Auto e motori in modo da includere il modulo condiviso, come mostrato nello snippet seguente:
trendy
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Implementare impostazioni e attività di accesso
Oltre al servizio di browser per contenuti multimediali, puoi fornire impostazioni ottimizzate per il veicolo e attività di accesso per la tua app per il sistema operativo Android Automotive. Queste attività ti consentono di fornire funzionalità dell'app non incluse nelle API Android Media.
Implementa queste attività solo se l'app del sistema operativo Android Automotive deve consentire agli utenti di accedere o specificare le impostazioni dell'app. Queste attività non vengono utilizzate da Android Auto.
Flussi di lavoro delle attività
Il seguente diagramma mostra in che modo un utente interagisce con le tue impostazioni e le attività di accesso utilizzando il sistema operativo Android Automotive:
Scoraggiare le distrazioni causate dalle impostazioni e dalle attività di accesso
Per assicurarti che le impostazioni e/o le attività di accesso possano essere utilizzate solo
quando il veicolo dell'utente è parcheggiato, verifica che l'elemento <activity>
non includa il seguente elemento <meta-data>
. Durante la revisione l'app verrà rifiutata se è presente un elemento di questo tipo.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Aggiungi un'attività relativa alle impostazioni
Aggiungi un'attività correlata alle impostazioni ottimizzate per il veicolo per consentire agli utenti di configurare le impostazioni per la propria auto. L'attività relativa alle impostazioni può anche fornire altri flussi di lavoro, ad esempio per accedere o uscire dall'account di un utente o per cambiare account utente. Ricorda che questa attività viene attivata solo da un'app in esecuzione sul sistema operativo Android Automotive. Le app del telefono collegate ad Android Auto non la usano.
Dichiarare un'attività relativa alle impostazioni
Devi dichiarare l'attività relativa alle impostazioni nel file manifest della tua app, come mostrato nel seguente snippet di codice:
<application>
...
<activity android:name=".AppSettingsActivity"
android:exported="true"
android:theme="@style/SettingsActivity"
android:label="@string/app_settings_activity_title">
<intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
</intent-filter>
</activity>
...
</application>
Implementare l'attività relativa alle impostazioni
Quando un utente avvia la tua app, il sistema operativo Android Automotive rileva l'attività relativa alle impostazioni che hai dichiarato e mostra un'offerta, ad esempio un'icona.
L'utente può toccare o selezionare l'offerta utilizzando il display dell'auto per andare all'attività. Il sistema operativo Android Automotive invia l'intent ACTION_APPLICATION_PREFERENCES
che indica alla tua app di avviare l'attività relativa alle impostazioni.
Il resto di questa sezione mostra come adattare il codice dell'app di esempio per il player di musica Android universale (UAMP) per implementare un'attività relativa alle impostazioni per la tua app.
Per iniziare, scarica il codice campione:
# Clone the UAMP repositorygit clone https://github.com/android/uamp.git
# Fetch the appropriate pull request to your local repositorygit fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME
# Switch to the new branchgit checkout NEW_LOCAL_BRANCH_NAME
Per implementare la tua attività, segui questi passaggi:
- Copia la cartella
automotive/automotive-lib
nel modulo Automotive. - Definisci un albero delle preferenze come
automotive/src/main/res/xml/preferences.xml
. Implementa un elemento
PreferenceFragmentCompat
visualizzato dall'attività relativa alle impostazioni. Per saperne di più, consulta i fileSettingsFragment.kt
eSettingsActivity.kt
in UAMP e la guida alle impostazioni di Android.
Durante l'implementazione dell'attività relativa alle impostazioni, prendi in considerazione queste best practice per l'utilizzo di alcuni dei componenti della Libreria delle preferenze:
- Non avere più di due livelli di profondità sotto la visualizzazione principale nell'attività relativa alle impostazioni.
- Non utilizzare una
DropDownPreference
. Utilizza invece unaListPreference
. - Componenti organizzativi:
PreferenceScreen
- Deve essere il livello più alto dell'albero delle preferenze.
PreferenceCategory
- Utilizzato per raggruppare
Preference
oggetti. - Includi un
title
.
- Utilizzato per raggruppare
- Includi
key
etitle
in tutti i componenti seguenti. Puoi anche includere un elementosummary
, unicon
o entrambi:Preference
- Personalizza la logica nel callback
onPreferenceTreeClick()
dell'implementazionePreferenceFragmentCompat
.
- Personalizza la logica nel callback
CheckBoxPreference
- Può avere
summaryOn
osummaryOff
anzichésummary
per il testo condizionale.
- Può avere
SwitchPreference
- Può avere
summaryOn
osummaryOff
anzichésummary
per il testo condizionale. - Possono avere
switchTextOn
oswitchTextOff
.
- Può avere
SeekBarPreference
- Includi
min
,max
edefaultValue
.
- Includi
EditTextPreference
- Includi
dialogTitle
,positiveButtonText
enegativeButtonText
. - Possono avere
dialogMessage
e/odialogLayoutResource
.
- Includi
com.example.android.uamp.automotive.lib.ListPreference
- Ricava principalmente da
ListPreference
. - Utilizzato per visualizzare un elenco a scelta singola di
Preference
oggetti. - Deve avere un array di
entries
e il valoreentryValues
corrispondente.
- Ricava principalmente da
com.example.android.uamp.automotive.lib.MultiSelectListPreference
- Deriva principalmente da
MultiSelectListPreference
- Utilizzato per visualizzare un elenco a scelta multipla di
Preference
oggetti. - Deve avere un array di
entries
e il valoreentryValues
corrispondente.
- Deriva principalmente da
Aggiungi un'attività di accesso
Se la tua app richiede a un utente di eseguire l'accesso prima di poter utilizzare l'app, puoi aggiungere un'attività di accesso ottimizzata per i veicoli che gestisce l'accesso e l'uscita dall'app. Puoi anche aggiungere flussi di lavoro di accesso e uscita a un'attività relativa alle impostazioni, ma puoi utilizzare un'attività di accesso dedicata se la tua app non può essere utilizzata finché un utente non esegue l'accesso. Ricorda che questa attività viene attivata solo da un'app in esecuzione sul sistema operativo Android Automotive. Le app del telefono collegate ad Android Auto non la utilizzano.
Richiedi accesso all'avvio dell'app
Per richiedere a un utente di eseguire l'accesso prima di poter utilizzare la tua app, il servizio browser multimediale deve:
- Nel metodo
onLoadChildren()
del tuo servizio, invia il risultatonull
usando il metodosendResult()
. - Imposta il valore
PlaybackStateCompat
della sessione multimediale suSTATE_ERROR
utilizzando il metodosetState()
. Questo indica al sistema operativo Android Automotive che non è possibile eseguire altre operazioni finché l'errore non è stato risolto. - Imposta il codice di errore
PlaybackStateCompat
della sessione multimediale suERROR_CODE_AUTHENTICATION_EXPIRED
. Questo indica al sistema operativo Android Automotive che l'utente deve eseguire l'autenticazione. - Imposta il messaggio di errore
PlaybackStateCompat
della sessione multimediale utilizzando il metodosetErrorMessage()
. Poiché questo messaggio di errore è rivolto agli utenti, localizzalo in base alle impostazioni internazionali correnti dell'utente. Imposta gli extra
PlaybackStateCompat
della sessione multimediale utilizzando il metodosetExtras()
. Includi le seguenti due chiavi:PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: una stringa visualizzata sul pulsante che avvia il flusso di lavoro di accesso. Poiché questa stringa è rivolta all'utente, localizzala per le impostazioni internazionali correnti dell'utente.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: unPendingIntent
che indirizza l'utente alle tue attività di accesso quando l'utente tocca il pulsante a cui si riferisce ilPLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
.
Il seguente snippet di codice mostra in che modo la tua app può richiedere all'utente di eseguire l'accesso prima di utilizzare l'app:
Kotlin
import androidx.media.utils.MediaConstants val signInIntent = Intent(this, SignInActivity::class.java) val signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0) val extras = Bundle().apply { putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in" ) putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent ) } val playbackState = PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build() mediaSession.setPlaybackState(playbackState)
Java
import androidx.media.utils.MediaConstants; Intent signInIntent = new Intent(this, SignInActivity.class); PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0, signInIntent, 0); Bundle extras = new Bundle(); extras.putString( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL, "Sign in"); extras.putParcelable( MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT, signInActivityPendingIntent); PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder() .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f) .setErrorMessage( PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED, "Authentication required" ) .setExtras(extras) .build(); mediaSession.setPlaybackState(playbackState);
Dopo che l'utente è stato autenticato correttamente, imposta di nuovo PlaybackStateCompat
su uno stato diverso da STATE_ERROR
, quindi riporta l'utente al sistema operativo Android Automotive chiamando il metodo finish()
dell'attività.
Implementare le attività di accesso
Google offre una varietà di strumenti di identità che puoi utilizzare per aiutare gli utenti ad accedere alla tua app nelle loro auto. Alcuni strumenti, come Firebase Authentication, forniscono toolkit completi che possono aiutarti a creare esperienze di autenticazione personalizzate. Altri strumenti sfruttano le credenziali esistenti di un utente o altre tecnologie per aiutarti a creare esperienze di accesso fluide per gli utenti.
I seguenti strumenti possono aiutarti a creare un'esperienza di accesso più semplice per gli utenti che hanno già eseguito l'accesso su un altro dispositivo:
- Accesso e registrazione con un tocco: se hai già implementato One Tap per altri dispositivi, ad esempio l'app Telefono, implementalo per l'app del sistema operativo Android Automotive in modo da supportare gli utenti One Tap esistenti.
- Accedi con Google: se hai già implementato Accedi con Google per altri dispositivi, ad esempio l'app Telefono, implementa Accedi con Google per l'app per il sistema operativo Android Automotive in modo da supportare gli utenti Accedi con Google esistenti.
- Compilazione automatica Google: se gli utenti hanno attivato la compilazione automatica Google sugli altri loro dispositivi Android, le loro credenziali vengono salvate nel Gestore delle password di Google. Quando questi utenti accedono alla tua app del sistema operativo Android Automotive, la Compilazione automatica Google suggerisce credenziali pertinenti salvate. L'utilizzo della Compilazione automatica Google non richiede lo sviluppo di applicazioni. Tuttavia, gli sviluppatori di applicazioni possono ottimizzare le proprie app per ottenere risultati di qualità migliori. La compilazione automatica Google è supportata da tutti i dispositivi con Android 8.0 (livello API 26) o versioni successive, incluso il sistema operativo Android Automotive.
Utilizza AccountManager
Le app del sistema operativo Android Automotive dotate di autenticazione devono utilizzare AccountManager per i seguenti motivi:
- Esperienza utente migliorata e facilità di gestione degli account: gli utenti possono gestire facilmente tutti i propri account dal menu Account nelle impostazioni di sistema, compresi l'accesso e la disconnessione.
- Esperienze"ospite": le auto sono dispositivi condivisi, il che significa che gli OEM possono attivare esperienze "ospite" nel veicolo, in cui non è possibile aggiungere account. Questa limitazione viene raggiunta utilizzando
DISALLOW_MODIFY_ACCOUNTS
perAccountManager
.
Autorizzazioni
Se devi richiedere le autorizzazioni all'utente, utilizza lo stesso flusso dell'attività di autenticazione o dell'attività delle impostazioni nello schema dei flussi di lavoro delle attività mostrato in una sezione precedente.
Leggi i suggerimenti dell'host multimediale
A seconda dell'applicazione di sistema (inclusa la sua versione) che si connette al servizio del browser multimediale, l'applicazione potrebbe ricevere i seguenti extra:
Gestione degli errori
Gli errori nelle app multimediali sul sistema operativo Android Automotive vengono comunicati tramite PlaybackStateCompat
della sessione multimediale. Per tutti gli errori, imposta un codice e un messaggio di errore appropriati in PlaybackStateCompat
. Questo causa la visualizzazione di un elemento Toast
nell'interfaccia utente.
Quando si verifica un errore, ma la riproduzione può continuare, genera un errore non irreversibile. Ad esempio, un utente potrebbe essere in grado di riprodurre musica in un'app prima di accedere, ma deve eseguire l'accesso per poter saltare un brano. Se utilizzi un errore non irreversibile, il sistema può suggerire all'utente di accedere senza interrompere la riproduzione dell'elemento multimediale corrente.
Quando generi un errore non irreversibile, conserva il resto di PlaybackStateCompat
così com'è, oltre al codice e al messaggio di errore. Questo
approccio consente di continuare la riproduzione dell'elemento multimediale corrente mentre l'utente
decide se eseguire o meno l'accesso.
Quando non è possibile riprodurre, ad esempio in assenza di connessione a internet o di contenuti offline, imposta lo stato PlaybackStateCompat
su STATE_ERROR
.
Negli aggiornamenti successivi di PlaybackStateCompat
, cancella eventuali codici e messaggi di errore per evitare di mostrare più avvisi per lo stesso errore.
Se in qualsiasi momento non riesci a caricare una struttura di esplorazione, ad esempio se richiedi l'autenticazione e l'utente non ha eseguito l'accesso, invia una struttura di esplorazione vuota. Per indicare ciò, restituisci un risultato null da onLoadChildren()
per il nodo multimediale radice. In questo caso, il sistema mostra un errore a schermo intero con il messaggio di errore impostato in PlaybackStateCompat
.
Errori attuabili
Se è possibile intervenire su un errore, imposta anche i seguenti due extra nella sezione PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: un'etichetta sul pulsante su cui fare clic per risolvere l'errore. Poiché questa stringa è rivolta all'utente, localizzala in base alle impostazioni internazionali correnti dell'utente.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: l'PendingIntent
eseguita dal pulsante per risolvere l'errore, ad esempio avviando la tua attività di accesso.
Gli errori risolvibili vengono visualizzati come Dialog
e possono essere risolti dagli utenti solo quando l'auto è ferma.
Test dei casi di errore
Verifica che la tua app gestisca in modo controllato gli errori in tutti gli scenari, tra cui:
- Diversi livelli di prodotto: ad esempio senza costi o premium oppure senza accesso o disconnesso.
- Stati di guida diversi: ad esempio, parcheggiato e alla guida
- Diversi stati della connettività, ad esempio online e offline.
Altre considerazioni
Durante lo sviluppo della tua app per il sistema operativo Android Automotive, tieni presente queste altre considerazioni:
Contenuti offline
Se applicabile, implementa il supporto per la riproduzione offline. Le auto con sistema operativo Android Automotive devono avere una propria connettività dati, il che significa che un piano dati è incluso nel costo del veicolo o pagato dall'utente. Tuttavia, si prevede che le auto abbiano anche una connettività più variabile rispetto ai dispositivi mobili.
Ecco alcuni aspetti da tenere presente quando valuti la tua strategia di assistenza offline:
- Il momento migliore per scaricare i contenuti è mentre l'app è in uso.
- Non dare per scontato che sia disponibile una rete Wi-Fi. il Wi-Fi potrebbe non essere mai raggiunto o l'OEM potrebbe aver disattivato il Wi-Fi a favore della rete cellulare.
- Anche se è consentito memorizzare in modo intelligente nella cache i contenuti che dovrebbero essere utilizzati dagli utenti, ti consigliamo di consentire all'utente di modificare questo comportamento tramite l'attività relativa alle impostazioni.
- Lo spazio su disco delle auto varia, quindi offri agli utenti un modo per eliminare i contenuti offline, ad esempio tramite un'opzione nelle attività delle impostazioni.
Supporto per WebView
I componenti WebView sono supportati nel sistema operativo Android Automotive, ma sono consentiti solo per le tue impostazioni e attività di accesso. Le attività che utilizzano un componente WebView devono avere un'autorizzazione di "chiusura" o "indietro" al di fuori di WebView.
Ecco alcuni esempi di casi d'uso accettabili per WebView:
- Mostrare le tue norme sulla privacy, i tuoi termini di servizio o altri link di tipo legale nell'attività relativa alle impostazioni.
- Un flusso basato sul web delle tue attività di accesso.
Quando utilizzi un componente WebView, puoi attivare JavaScript.
Proteggi la tua WebView
Prendi tutte le precauzioni possibili per assicurarti che il tuo componente WebView non sia un punto di accesso a internet. Consulta il seguente snippet di codice per un esempio su come bloccare WebView nell'URL utilizzato nella chiamata loadUrl()
e impedire i reindirizzamenti. Ti consigliamo vivamente di implementare misure di protezione come questa, ove possibile, ad esempio in caso di visualizzazione di link di natura legale.
Kotlin
override fun shouldOverrideUrlLoading(webView: WebView, webResourceRequest: WebResourceRequest): Boolean { val originalUri: Uri = Uri.parse(webView.originalUrl) // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.url)) { return false } if (webResourceRequest.isRedirect) { logger.w("Redirect detected, not following") return true } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url) logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri)) return true }
Java
@Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) { Uri originalUri = Uri.parse(webView.getOriginalUrl()); // Check for allowed URLs if (originalUri.equals(Uri.parse(BLANK_URL)) || originalUri.equals(webResourceRequest.getUrl())) { return false; } if (webResourceRequest.isRedirect()) { logger.w("Redirect detected, not following"); return true; } setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl()); logger.w( String.format( "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri)); return true; }
Nomi dei pacchetti
Poiché distribuisci un APK (Android Package Kit) separato per il sistema operativo Android Automotive, puoi riutilizzare il nome del pacchetto dalla tua app mobile o crearne uno nuovo. Se utilizzi un nome di pacchetto diverso, la tua app ha due schede del Play Store separate. Se riutilizzi il nome del pacchetto corrente, la tua app ha una sola scheda su entrambe le piattaforme.
Si tratta prevalentemente di una decisione aziendale. Ad esempio, se hai un team che lavora all'app mobile e un altro all'app per il sistema operativo Android Automotive, potrebbe avere senso avere nomi di pacchetti separati e lasciare che ogni team gestisca la propria scheda del Play Store. Non c'è una grande differenza nello sforzo tecnico necessario per utilizzare entrambi gli approcci.
La seguente tabella riassume alcune altre differenze fondamentali tra la conservazione del nome del pacchetto attuale e l'utilizzo di un nuovo nome del pacchetto:
Funzionalità | Stesso nome del pacchetto | Nuovo nome pacchetto |
---|---|---|
Scheda dello Store | Singolo | Diversi |
Installazione con mirroring | Sì: "reinstallazione rapida dell'app" durante la configurazione guidata | No |
Procedura di revisione del Play Store | Blocco delle recensioni: se la revisione non va a buon fine per un APK, gli altri APK inviati nella stessa release vengono bloccati. | Recensioni singole |
Statistiche, metriche e vitali | Combinato: puoi filtrare in base a dati specifici del settore auto e motori. | Separa |
Indicizzazione e ranking nei risultati di ricerca | Basati sulla posizione attuale | Nessun riporto |
Integrazione con altre app | Molto probabilmente non sono necessarie modifiche, supponendo che il codice multimediale sia condiviso tra entrambi gli APK | Potrebbe essere necessario aggiornare l'app corrispondente, ad esempio per la riproduzione dell'URI con l'Assistente Google. |
Domande frequenti
Consulta le seguenti sezioni per trovare le risposte ad alcune domande frequenti sul sistema operativo Android Automotive.
Hardware
La mia app può avere accesso al microfono?
Per le app che hanno come target Android 10 (livello API 29) o versioni successive, consulta la documentazione relativa alla condivisione dell'input audio. Ciò non è possibile prima del livello API 29.
A quali API per auto possiamo accedere e come?
Puoi utilizzare solo le API esposte dall'OEM. Sono in fase di sviluppo dei processi per standardizzare il modo in cui accedi a queste API.
Le app possono accedere alle API per auto utilizzando SetProperty()
e GetProperty()
in CarPropertyManager
.
Fai riferimento al codice sorgente o alla documentazione di riferimento per visualizzare un elenco di tutte le proprietà disponibili. Se la proprietà è annotata con @SystemApi
, è limitata alle app di sistema precaricate.
Quali tipi di codec audio sono supportati?
Consulta i dettagli del codec audio nel CDD di Android.
Widevine DRM è supportato?
Sì. Widevine DRM è supportato.
Sviluppo e test
Esistono limitazioni o consigli per l'utilizzo di SDK e librerie di terze parti?
Non abbiamo linee guida specifiche sull'utilizzo di SDK e librerie di terze parti. Se scegli di usare SDK e librerie di terze parti, devi comunque rispettare tutti i requisiti di qualità delle app per auto.
Posso utilizzare un servizio in primo piano?
L'unico caso d'uso consentito per un servizio in primo piano è il download di contenuti per l'utilizzo offline. Se hai un altro caso d'uso per un servizio in primo piano per il quale vuoi ricevere assistenza, contattaci utilizzando il gruppo di discussione del sistema operativo Android Automotive.
Pubblicazione di app per il sistema operativo Android Automotive
Come faccio a pubblicare la mia app del sistema operativo Android Automotive utilizzando Google Play Console?
La procedura di pubblicazione delle app è simile alla pubblicazione di un'app per smartphone, ma utilizzi un fattore di forma diverso. Per attivare l'utilizzo del fattore di forma del sistema operativo Android Automotive:
- Apri Play Console.
- Seleziona l'app.
- Nel menu a sinistra, fai clic su Release > Configurazione > Impostazioni avanzate > Fattori di forma.
- Fai clic su Aggiungi fattore di forma > Sistema operativo Android Automotive, quindi segui le istruzioni in Play Console.
Risorse aggiuntive
Per saperne di più sul sistema operativo Android Automotive, consulta le seguenti risorse aggiuntive.
Campioni
Guide
- Progetta per la guida
- Utilizzare l'app Media Controller Test
- Notifiche sul sistema operativo Android Automotive
- Qualità delle app Android per le auto
Blog
- Aggiornamenti del sistema operativo Android Automotive per gli sviluppatori
- Sviluppo di app per il sistema operativo Android Automotive
Video
- Come creare app multimediali per le auto (Android Dev Summit '19)
- Come creare app Android per le auto (Google I/O'19)
Segnalare un problema relativo ai contenuti multimediali del sistema operativo Android Automotive
Se riscontri un problema durante lo sviluppo della tua app multimediale per il sistema operativo Android Automotive, puoi segnalarlo utilizzando lo strumento Issue Tracker di Google. Assicurati di compilare tutte le informazioni richieste nel modello del problema.
Prima di inviare un nuovo problema, controlla se è già stato segnalato nell'elenco dei problemi. Puoi iscriverti e votare i problemi facendo clic sulla stella accanto a un problema nel tracker. Per ulteriori informazioni, consulta la sezione Iscrizione a un problema.