Aggiungere il supporto del sistema operativo Android Automotive alla tua app multimediale

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:

  1. Attiva le funzionalità Auto e motori in Android Studio.
  2. Crea un modulo Automotive.
  3. Aggiorna le dipendenze da Gradle.
  4. (Facoltativo) Implementa le impostazioni e le attività di accesso.
  5. (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:

  1. In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
  2. Seleziona Automotive Module, quindi fai clic su Next (Avanti).
  3. Inserisci un Nome applicazione/libreria. Questo è il nome che gli utenti visualizzano la tua app su Android Automotive OS.
  4. Inserisci un Nome modulo.
  5. Modifica il Nome del pacchetto in modo che corrisponda alla tua app.
  6. 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.

  7. 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:

Flussi di lavoro per le attività relative a impostazioni e accesso

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 repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

Per implementare la tua attività:

  1. Copia la cartella automotive/automotive-lib nel modulo Automotive.
  2. Definisci una struttura ad albero delle preferenze automotive/src/main/res/xml/preferences.xml.
  3. Implementare una PreferenceFragmentCompat che viene visualizzata dall'attività relativa alle impostazioni. Consulta i SettingsFragment.kt e File SettingsActivity.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 una ListPreference.
  • Componenti organizzativi:
  • Includi key e title in tutti i seguenti componenti. Puoi anche includi un summary, un icon o entrambi:
      .
    • Preference
      • Personalizza la logica nel callback onPreferenceTreeClick() del tuo Implementazione di PreferenceFragmentCompat.
    • CheckBoxPreference
      • Può avere summaryOn o summaryOff anziché summary per il testo condizionale.
    • SwitchPreference
      • Può avere summaryOn o summaryOff anziché summary per il testo condizionale.
      • Può avere switchTextOn o switchTextOff.
    • SeekBarPreference
      • Includi min, max e defaultValue.
    • EditTextPreference
      • Includi dialogTitle, positiveButtonText e negativeButtonText.
      • Può avere dialogMessage e/o dialogLayoutResource.
    • 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 e entryValues corrispondente.
    • 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 entryValues corrispondente.

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:

  1. Nel metodo onLoadChildren() del tuo servizio, invia null risultato utilizzando il sendResult(): .
  2. Imposta il valore PlaybackStateCompat della sessione multimediale per STATE_ERROR utilizzando setState() . Questo indica ad Android Automotive OS che non è possibile eseguire altre operazioni l'errore è stato risolto.
  3. Imposta il valore PlaybackStateCompat della sessione multimediale il codice di errore a ERROR_CODE_AUTHENTICATION_EXPIRED. Questo indica ad Android Automotive OS che l'utente deve autenticarsi.
  4. Imposta il valore PlaybackStateCompat della sessione multimediale utilizzando lo strumento setErrorMessage() . Poiché questo messaggio di errore è rivolto agli utenti, localizzalo per le impostazioni internazionali correnti dell'utente.
  5. Imposta il valore PlaybackStateCompat della sessione multimediale extra con setExtras() . Includi le due chiavi seguenti:

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 per AccountManager.

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:

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:

  1. Apri Play Console.
  2. Seleziona l'app.
  3. Nel menu a sinistra, fai clic su Release > Configurazione > Impostazioni avanzate > Fattori di forma.
  4. 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

Blog

Video

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.

Crea un nuovo numero

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.