Il sistema operativo Android Automotive consente agli utenti di installare app nell'auto. Per raggiungere su questa piattaforma, dovete distribuire un'app ottimizzata per il conducente che sia compatibile con Android Automotive OS. Puoi riutilizzare quasi tutto il codice risorse nell'app Android Auto, ma devi creare una build separata che che soddisfi i requisiti riportati in questa pagina.
Panoramica dello sviluppo
L'aggiunta del supporto di Android Automotive OS richiede solo pochi passaggi, come descritto nelle sezioni seguenti:
- Attiva le funzionalità Auto e motori in Android Studio.
- Crea un modulo Automotive.
- Aggiorna le dipendenze da Gradle.
- (Facoltativo) Implementa le impostazioni e le attività di accesso.
- (Facoltativo) Leggi i suggerimenti dell'host multimediale.
Considerazioni sulla progettazione
Android Automotive OS si occupa di definire il layout dei contenuti multimediali riceve dal servizio browser multimediale della tua app. Ciò significa che l'app non traccia l'UI e non avvia nessuno di le tue 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. Fai riferimento alle linee guida sulla progettazione. per Android Automotive OS.
Configura il progetto
Per abilitare questa funzione, devi configurare diverse parti del progetto per Android Automotive OS.
Attiva le funzionalità di auto e motori in Android Studio
Utilizza Android Studio 4.0 o una versione successiva per assicurarti che tutte le funzionalità del sistema operativo Automotive vengano in un bucket in cui è abilitato il controllo delle versioni.
Crea un modulo Automotive
Alcuni componenti del sistema operativo Android Automotive, come il file manifest, hanno requisiti specifici della piattaforma. Crea un modulo che possa conservare separato per questi componenti da altro codice nel progetto, come il codice utilizzato per l'app per smartphone.
Segui questi passaggi per aggiungere un modulo Automotive al tuo progetto:
- In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
- Seleziona Automotive Module, quindi fai clic su Next (Avanti).
- Inserisci un Nome applicazione/libreria. Questo è il nome che gli utenti visualizzano la tua app su Android Automotive OS.
- Inserisci un Nome modulo.
- Modifica il Nome del pacchetto in modo che corrisponda alla tua 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 funzionano su Android 9 (livello API 28) oppure superiore, pertanto selezionando questo valore target compatibili con le automobili.
Seleziona Nessuna attività, quindi fai clic su Fine.
Dopo aver creato il modulo in Android Studio, apri AndroidManifest.xml
in
il tuo 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>
La application
contiene alcune informazioni standard sull'app e un
uses-feature
che dichiara il supporto per Android Automotive OS. Tieni presente che
non sono dichiarate attività nel file manifest.
Se implementi impostazioni o attività di accesso, aggiungi qui. Queste attività vengono attivate dal sistema utilizzando intent espliciti e sono le uniche attività che dichiari nel file manifest per i tuoi App per Android Automotive OS.
Dopo aver aggiunto le impostazioni o le attività di accesso, completa il file manifest procedendo nel seguente modo:
Impostazione dell'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 caratteristiche su required="false"
garantisce che
la tua app non è in conflitto con le funzionalità hardware disponibili in Automotive OS
dispositivi mobili.
Dichiara il supporto dei contenuti multimediali per Android Automotive OS
Utilizza la seguente voce manifest per dichiarare che la tua app supporta Sistema operativo Android Automotive:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Questa voce manifest si riferisce a un file XML che dichiara la supportate dalla tua app.
Per indicare che disponi di un'app multimediale, aggiungi un'opzione
Il file XML denominato automotive_app_desc.xml
nella directory res/xml/
nel tuo
progetto. Includi i seguenti contenuti nel file:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Filtri per intent
Android Automotive OS utilizza intent espliciti per attivare attività nei tuoi contenuti multimediali
dell'app. Non includere attività che sono state
CATEGORY_LAUNCHER
o intent ACTION_MAIN
nel file manifest.
Attività come quella nell'esempio seguente di solito sono rivolte a uno o più telefoni da un altro dispositivo mobile. Dichiara queste attività nel modulo crea l'app per smartphone, non nel modulo che costruisce il sistema operativo Android Automotive dell'app.
<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 mantenere il tuo servizio di browser multimediale in un modulo separato che condividi tra la tua app per smartphone e la tua in maggior dettaglio più avanti in questo modulo. Se utilizzi questo approccio, devi aggiornare le impostazioni per includere il modulo condiviso, come mostrato nello snippet seguente:
my-auto-module/build.gradle
Alla moda
buildscript { ... dependencies { ... implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation(project(":shared_module_name")) } }
Implementa le impostazioni e le attività di accesso
Oltre al tuo servizio di browser multimediale, puoi anche fornire servizi ottimizzati per veicoli impostazioni e attività di accesso per l'app Android Automotive OS. Queste attività ti consentono di fornire funzionalità dell'app non incluse nel API Android Media.
Implementa queste attività solo se la tua app per Android Automotive OS deve consentire agli utenti di accedere o di specificare le impostazioni dell'app. Queste attività non utilizzata da Android Auto.
Flussi di lavoro delle attività
Il seguente diagramma mostra in che modo un utente interagisce con le tue impostazioni e Attività di accesso tramite Android Automotive OS:
Figura 1. Flussi di lavoro relativi a impostazioni e attività di accesso.
Scoraggiare le distrazioni nei contesti e nelle attività di accesso.
Per assicurarti che le impostazioni e/o le attività di accesso siano disponibili solo per l'uso
mentre il veicolo dell'utente è parcheggiato, verifica che l'elemento <activity>
non includere il seguente elemento <meta-data>
. La tua app verrà rifiutata
durante la revisione, se è presente un elemento di questo tipo.
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
Aggiungi un'attività relativa alle impostazioni
Puoi aggiungere un'attività con impostazioni ottimizzate per il veicolo in modo che in modo che gli utenti possano configurare le impostazioni della tua app nella propria auto. Le tue impostazioni attività può anche fornire altri flussi di lavoro, come l'accesso o la disconnessione dal account utente o cambiare account utente. Ricorda che questa attività riguarda attivata da un'app in esecuzione sul sistema operativo Android Automotive. App dello smartphone collegate a non utilizzare Android Auto.
Dichiarare un'attività relativa alle impostazioni
Devi dichiarare la tua attività relativa alle impostazioni nel file manifest dell'app, come mostrato in il 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>
Implementa l'attività relativa alle impostazioni
Quando un utente avvia la tua app, Android Automotive OS rileva la
l'attività delle impostazioni che hai dichiarato e che mostra un'invito, ad esempio un'icona.
L'utente può toccare o selezionare questa invito utilizzando il display dell'auto per navigare
all'attività. Android Automotive OS invia ACTION_APPLICATION_PREFERENCES
che indichi alla tua app di iniziare l'attività relativa alle impostazioni.
Il resto di questa sezione mostra come adattare il codice dall'interfaccia Universal App di esempio Android Music Player (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à:
- Copia la cartella
automotive/automotive-lib
nel modulo Automotive. - Definisci una struttura ad albero delle preferenze
automotive/src/main/res/xml/preferences.xml
. Implementare una
PreferenceFragmentCompat
che viene visualizzata dall'attività relativa alle impostazioni. Consulta iSettingsFragment.kt
e FileSettingsActivity.kt
in UAMP e Impostazioni Android per saperne di più.
Quando implementi la tua attività relativa alle impostazioni, prendi in considerazione queste best practice per l'utilizzo alcuni dei componenti della libreria Preferenze:
- Non avere più di due livelli di profondità sotto la visualizzazione principale in la tua attività relativa alle impostazioni.
- Non utilizzare un
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 seguenti componenti. Puoi anche includi unsummary
, unicon
o entrambi:- .
Preference
- Personalizza la logica nel callback
onPreferenceTreeClick()
del tuo Implementazione diPreferenceFragmentCompat
.
- 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. - Può avere
switchTextOn
oswitchTextOff
.
- Può avere
SeekBarPreference
- Includi
min
,max
edefaultValue
.
- Includi
EditTextPreference
- Includi
dialogTitle
,positiveButtonText
enegativeButtonText
. - Può avere
dialogMessage
e/odialogLayoutResource
.
- Includi
com.example.android.uamp.automotive.lib.ListPreference
- Deriva principalmente da
ListPreference
. - Utilizzato per visualizzare un elenco a scelta singola di
Preference
oggetti. - Deve avere un array di
entries
eentryValues
corrispondente.
- Deriva 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
eentryValues
corrispondente.
- Deriva principalmente da
Aggiungi un'attività di accesso
Se la tua app richiede all'utente di eseguire l'accesso prima di poterla utilizzare, puoi aggiungere un'attività di accesso ottimizzata per il veicolo che gestire l'accesso e la disconnessione dall'app. Puoi anche aggiungere opzioni di accesso e uscita flussi di lavoro a un'attività basata sulle impostazioni, ma usa un attività di accesso dedicata se la tua app non può essere utilizzata fino a quando esegue l'accesso. Ricorda che questa attività viene attivata soltanto da un'app in esecuzione su Sistema operativo Android Automotive. Le app dello smartphone collegate ad Android Auto non lo usano.
Richiedi l'accesso all'avvio dell'app
Per richiedere a un utente di accedere prima di poter usare la tua app, il browser multimediale deve eseguire le seguenti operazioni:
- Nel metodo
onLoadChildren()
del tuo servizio, invianull
risultato utilizzando ilsendResult()
: . - Imposta il valore
PlaybackStateCompat
della sessione multimediale perSTATE_ERROR
utilizzandosetState()
. Questo indica ad Android Automotive OS che non è possibile eseguire altre operazioni l'errore è stato risolto. - Imposta il valore
PlaybackStateCompat
della sessione multimediale il codice di errore aERROR_CODE_AUTHENTICATION_EXPIRED
. Questo indica ad Android Automotive OS che l'utente deve autenticarsi. - Imposta il valore
PlaybackStateCompat
della sessione multimediale utilizzando lo strumentosetErrorMessage()
. Poiché questo messaggio di errore è rivolto agli utenti, localizzalo per le impostazioni internazionali correnti dell'utente. Imposta il valore
PlaybackStateCompat
della sessione multimediale extra consetExtras()
. Includi le due chiavi seguenti: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 impostazioni internazionali correnti.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
: unPendingIntent
che indirizza all'attività di accesso quando l'utente tocca il pulsante indicato dalPLAYBACK_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 PlaybackStateCompat
a uno stato diverso da STATE_ERROR
,
quindi riporta l'utente ad Android Automotive OS richiamando il
finish()
:
.
Implementa la tua attività di accesso
Google offre diversi strumenti per la gestione delle identità che puoi utilizzare per aiutare gli utenti ad accedere alla tua app nelle loro auto. Alcune come Firebase Authentication, offrono toolkit full stack in grado di per creare esperienze di autenticazione personalizzate. Altri strumenti sfruttano le credenziali esistenti di un utente o altre tecnologie per aiutarti a creare esperienze di accesso degli utenti.
I seguenti strumenti possono aiutarti a semplificare l'accesso per gli utenti che hanno già eseguito l'accesso su un altro dispositivo:
- Accesso e registrazione con One Tap: se hai già implementato One Tap per altri dispositivi, come la tua app per smartphone, implementala per il tuo App per Android Automotive OS per supportare gli utenti One Tap esistenti.
- Accedi con Google: se hai già implementato Accedi con Google. per altri dispositivi, come la tua app per smartphone, implementare Google Accedere all'app Android Automotive OS per supportare la funzionalità Accedi con Google utenti.
- Compilazione automatica Google:se gli utenti hanno attivato la Compilazione automatica Google. sugli altri dispositivi Android, le credenziali vengono salvate in Gestore delle password di Google. Quando questi utenti accedono alla tua app per Android Automotive OS, la Compilazione automatica con Google suggerisce le credenziali salvate pertinenti. L'utilizzo della Compilazione automatica Google senza dover sviluppare applicazioni. Tuttavia, gli sviluppatori di applicazioni possono ottimizzare le proprie app per ottenere risultati di qualità migliore. La compilazione automatica Google è supportata da tutti i dispositivi con Android 8.0 (livello API 26) o versioni successive, incluso Android Automotive OS.
Utilizza AccountManager
Le app per Android Automotive OS con autenticazione devono utilizzare AccountManager, per i seguenti motivi:
- Migliore esperienza utente e facilità di gestione dell'account: gli utenti possono gestire facilmente tutti i loro account dal menu degli account nelle impostazioni di sistema, compreso e uscire.
- "Ospite" di Google Cloud: le auto sono dispositivi condivisi, il che significa che gli OEM possono
"ospite" esperienze nel veicolo, in cui non è possibile aggiungere account. Questo
viene raggiunta usando
DISALLOW_MODIFY_ACCOUNTS
perAccountManager
.
Autorizzazioni
Se devi richiedere le autorizzazioni all'utente, utilizza lo stesso flusso del l'attività di autenticazione o l'attività relativa alle impostazioni nei flussi di lavoro delle attività diagramma mostrato in una sezione precedente.
Lettura suggerimenti host contenuti multimediali
A seconda dell'applicazione di sistema (inclusa la sua versione) a cui si connette servizio di 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 i contenuti multimediali.
PlaybackStateCompat
della sessione. Imposta un errore appropriato per tutti gli errori
il codice e il messaggio di errore nel file PlaybackStateCompat
. Questo fa sì che venga visualizzato un Toast
nell'interfaccia utente.
Quando si verifica un errore, ma la riproduzione può continuare, emetti un errore non irreversibile . Ad esempio, un utente potrebbe riuscire a riprodurre musica in un'app prima di accedere, ma devono eseguire l'accesso prima di poter saltare una canzone. Quando utilizzi un errore non irreversibile, il sistema può suggerire all'utente di accedere senza interrompere la riproduzione per all'elemento multimediale corrente.
Quando si verifica un errore non irreversibile, mantieni il resto
PlaybackStateCompat
così com'è, a parte il codice e il messaggio di errore. Utilizzo di questo
consente di continuare la riproduzione dell'elemento multimediale corrente mentre l'utente
decide se eseguire o meno l'accesso.
Quando non è possibile riprodurre i contenuti, ad esempio in assenza di connessione a internet e
nessun contenuto offline, imposta lo stato PlaybackStateCompat
su STATE_ERROR
.
Nei successivi aggiornamenti a PlaybackStateCompat
, cancella gli eventuali codici di errore
per evitare di visualizzare più avvisi per lo stesso errore.
Se in qualsiasi momento non riesci a caricare un albero di navigazione, ad esempio se
richiedono l'autenticazione e l'utente non ha effettuato l'accesso: invia una
sfogliare l'albero. A questo scopo, restituisci un risultato nullo da onLoadChildren()
per
il nodo multimediale radice. In questi casi, il sistema visualizza uno schermo intero
con il messaggio di errore impostato nel PlaybackStateCompat
.
Errori risolvibili
Se ritieni che si tratti di un errore, imposta anche i seguenti due extra nella
PlaybackStateCompat
:
PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL
: un'etichetta su cui fare clic sul pulsante per risolvere l'errore. Poiché questa stringa è rivolto all'utente, localizzalo per la sua lingua.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT
:PendingIntent
che il pulsante esegue per risolvere l'errore, ad esempio avviando l'attività di accesso.
Gli errori utilizzabili vengono visualizzati come Dialog
e possono essere risolti dagli utenti solo quando
l'auto è ferma.
Test dei casi di errore
Verifica che l'app gestisca correttamente gli errori in tutti gli scenari, tra cui:
- Diversi livelli del prodotto:ad esempio senza costi, premium o accesso effettuato. anziché senza aver eseguito l'accesso
- Diversi stati di guida:ad esempio, parcheggiato o in auto.
- Stati di connettività diversi:ad esempio online e offline.
Altre considerazioni
Tieni presenti queste altre considerazioni durante lo sviluppo di Android Automotive App del sistema operativo:
Contenuti offline
Se applicabile, implementa il supporto della riproduzione offline. Auto con Android Automotive I sistemi operativi devono avere una propria connettività dati, il che significa piano dati è incluso nel costo del veicolo o pagato dall'utente. Tuttavia, si prevede che anche le auto abbiano una connettività più variabile rispetto a quella mobile dispositivi mobili.
Di seguito sono riportati alcuni aspetti da tenere presenti quando valuti l'assistenza offline strategia:
- Il momento migliore per scaricare i contenuti è mentre l'app è in uso.
- Non dare per scontato che sia disponibile una rete Wi-Fi. Un'auto potrebbe non rientrare mai nel raggio d'azione del Wi-Fi, oppure l'OEM potrebbe aver disattivato il Wi-Fi a favore di una rete mobile.
- Anche se è consentito memorizzare nella cache i contenuti che ci si aspetta che gli utenti utilizzino, ti consigliamo di consentire all'utente di modificare questo comportamento tramite la tua attività relativa alle impostazioni.
- Lo spazio su disco sulle auto varia, quindi offri agli utenti un modo per eliminarlo contenuti offline, ad esempio tramite un'opzione nel attività delle impostazioni.
Supporto WebView
I componenti WebView sono supportati in Android Automotive OS, ma sono consentiti solo per le tue impostazioni e le attività di accesso. Le attività che utilizzano un componente WebView devono avere un "chiudi" o "Indietro" al di fuori di WebView.
Ecco alcuni esempi di casi d'uso accettabili per i componenti WebView:
- Visualizzazione delle norme sulla privacy, dei Termini di servizio o di altri link di natura legale nella tua attività delle impostazioni.
- Un flusso basato sul web nell'attività di accesso.
Se utilizzi un componente WebView, puoi abilitare JavaScript.
Proteggi la tua WebView
Prendi tutte le precauzioni possibili per assicurarti che il componente WebView non sia un
punto di accesso a internet. Vedi il seguente snippet di codice per
su come bloccare WebView all'URL utilizzato nella
loadUrl()
ed evitare i reindirizzamenti. Ti consigliamo vivamente di implementare misure di salvaguardia
in questo modo quando possibile, ad esempio quando
link di tipo 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 Android Package Kit (APK) separato per il sistema operativo Android Automotive, puoi: riutilizza il nome del pacchetto dalla tua app mobile o crea un nuovo pacchetto . Se utilizzi un nome di pacchetto diverso, la tua app avrà due versioni separate del Play Store schede. Se riutilizzi il tuo attuale nome pacchetto, la tua app ha un un'unica scheda su entrambe le piattaforme.
Si tratta di una decisione prevalentemente aziendale. Ad esempio, se un team sta lavorando l'app mobile e un team separato che lavora su Android Automotive dell'app del sistema operativo, potrebbe avere senso avere nomi di pacchetto separati e lasciare che di gestire la propria scheda del Play Store. Non c'è una grande differenza nel l'impegno tecnico necessario per utilizzare uno dei due approcci.
La seguente tabella riassume alcune altre differenze chiave tra la conservazione nome del pacchetto corrente e utilizzando un nuovo nome:
Funzionalità | Stesso nome del pacchetto | Nuovo nome pacchetto |
---|---|---|
Scheda dello Store | Singolo | Diversi |
Installazione con mirroring | Sì: "reinstallazione rapida delle 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, per altri APK inviati nella stessa release sono bloccati | Recensioni singole |
Statistiche, metriche e dati vitali | Combinata: puoi filtrare i dati specifici del settore auto e motori. | Separa |
Indicizzazione e ranking nei risultati di ricerca | Sviluppa la tua reputazione | Nessun riporto |
Integrazione con altre app | Molto probabilmente non saranno 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 URI con l'Assistente Google. |
Domande frequenti
Consulta le sezioni seguenti per trovare le risposte ad alcune domande frequenti su Sistema operativo Android Automotive.
Hardware
La mia app può accedere al microfono?
Per le app che hanno come target Android 10 (livello API 29) o versioni successive, consulta la condivisione input audio. Questo non è prima del livello API 29.
A quali API delle auto possiamo accedere e in che modo?
Puoi utilizzare solo le API esposte dall'OEM. I processi sono in corso sviluppati per standardizzare le modalità di accesso a queste API.
Le app possono accedere alle API dell'auto utilizzando SetProperty()
e GetProperty()
in CarPropertyManager
.
Fai riferimento al codice sorgente
o la documentazione di riferimento per consultare
un elenco di tutte le proprietà disponibili. Se la proprietà è annotata
con @SystemApi
, è limitato alle app di sistema precaricate.
Quali tipi di codec audio sono supportati?
Consulta i dettagli relativi al codec audio nel CDD di Android.
Widevine DRM è supportato?
Sì. DRM Widevine è supportato.
Sviluppo e test
Sono presenti 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 utilizzare SDK e librerie di terze parti, sei comunque responsabile per 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 che vuoi per visualizzare l'assistenza, contattaci utilizzando Android Automotive OS gruppo di discussione.
Pubblicazione di app per Android Automotive OS
Come faccio a pubblicare la mia app per Android Automotive OS utilizzando Google Play Console?
La procedura di pubblicazione dell'app è simile alla pubblicazione di un'app per smartphone, ma utilizzi un fattore di forma diverso. Per attivare l'utilizzo di Android Automotive nella tua app Fattore di forma del sistema operativo, segui questi passaggi:
- 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 > Android Automotive OS, quindi segui le istruzioni nella Play Console.
Risorse aggiuntive
Per scoprire di più su Android Automotive OS, consulta le Google Cloud.
Campioni
Guide
- Progettare per la guida
- Utilizzo dell'app di test del controller multimediale
- Notifiche su Android Automotive OS
- Qualità delle app per Android per le auto
Blog
Video
- Come creare app multimediali per auto (Android Dev Summit '19)
- Come creare app Android per le auto (Google I/O '19)
Segnalare un problema di contenuti multimediali di Android Automotive OS
Se riscontri un problema durante lo sviluppo della tua app multimediale per Android Automotive OS, puoi segnalarlo utilizzando Google Issue Tracker. Assicurati di compilare tutte le informazioni richieste nel modello di problema.
Prima di inviare un nuovo problema, controlla se è già segnalato nei problemi. dall'elenco di lettura. Puoi iscriverti e votare per i problemi facendo clic sulla stella relativa a un problema in il tracker. Per ulteriori informazioni, vedi Abbonarsi a un problema.