Componenti del sistema e flussi di utenza

Il diagramma seguente illustra i componenti che interagiscono con Media:

Componenti del sistema

Figura 1. Componenti del sistema

Gli elementi di questa figura sono descritti nella tabella:

Componente Descrizione
Schermo di casa Rappresenta altre superfici nell'interfaccia utente dell'auto che visualizzano e controllano i contenuti multimediali attualmente in riproduzione. In AOSP, questa è la schermata principale visualizzata all'avvio del sistema. Da questa schermata, gli utenti possono visualizzare i dettagli dell'elemento multimediale riprodotto ed eseguire una serie limitata di azioni standard e personalizzate (ad esempio, Riproduci e Pausa).
Interfaccia utente del sistema Fornisce funzionalità che includono opzioni di navigazione dell'interfaccia utente globale come la navigazione in Media.
Assistenti Android fornisce meccanismi per consentire a diverse app di assistente vocale di interagire con il sistema. Queste app possono interagire con le sorgenti multimediali in background (ad esempio, riproducendo un brano come risultato di un comando vocale) o navigare in Media in primo piano (ad esempio, quando a un'app di assistente vocale viene richiesto di visualizzare l'interfaccia utente di un specifica fonte multimediale).
Avvio applicazioni Tutte le app Android vengono avviate nell'Avvio app, incluse le origini multimediali. I media possono presentare il proprio selettore di fonti multimediali, integrando o sostituendo l'App Launcher come punto di partenza per i media.
Google Play Store Quando viene utilizzato GAS, è qui che gli utenti individuano e installano nuove app in un dispositivo Android. Per i contenuti multimediali, una volta installate le app, gli utenti vengono indirizzati a Media per completare la procedura di accesso o per iniziare a interagire con l'app.
Gestore delle sessioni multimediali Servizio di sistema Android che tiene traccia e controlla le sessioni multimediali da tutte le fonti multimediali. Fornisce meccanismi per rilevare quando una sorgente multimediale diventa la sorgente multimediale in primo piano . Media e tutte le altre app che visualizzano la sorgente multimediale attualmente in riproduzione (ad esempio la schermata Home) utilizzano Media Session Manager per rilevare questi eventi e aggiornare l'interfaccia utente di conseguenza. Le fonti multimediali interagiscono con Media Session Manager tramite Media Session API .
Radio App specializzata per interagire con l'hardware della radio. La radio ricerca le stazioni radio, selezionando rapidamente le stazioni identificate di recente e passando da una banda radio all'altra. I componenti dell'interfaccia utente condivisi sia da Radio che da Media consentono all'utente di passare da una esperienza all'altra.
Motore di distrazione del conducente Servizio di sistema Android utilizzato per imporre restrizioni UX in base allo stato di guida dell'auto. Per l'accesso alle fonti multimediali e le impostazioni UX (dove lo schermo è controllato direttamente dalle fonti multimediali), questo servizio garantisce che non vengano visualizzati contenuti non sicuri quando l'auto è in stato di guida. Gli OEM possono personalizzare la definizione di questi stati e il modo in cui il sistema reagisce in queste situazioni (ad esempio, visualizzando una schermata in sovrapposizione di blocco).

Flussi utente

Lancio dell'app multimediale

Il processo che avvia Media viene visualizzato di seguito.

Lancio dell'app multimediale

Figura 2. Lancio dell'app multimediale

Il supporto deve essere avviato utilizzando il seguente CAR_INTENT_ACTION_MEDIA_TEMPLATE implicito . Questo intento può avere le seguenti informazioni come extra :

  • android.car.intent.extra.MEDIA_COMPONENT ( opzionale ). Stringa aggiuntiva per rappresentare il nome del componente appiattito di un MediaBrowserService nell'app multimediale a cui il Media deve connettersi. Se non fornito, Media visualizza l'app multimediale attualmente selezionata. Questo intento viene utilizzato dai seguenti punti di ingresso:

    • Interfaccia utente del sistema. Utilizzato per tornare all'esperienza multimediale o per iniziare a utilizzarlo per la prima volta. In questo caso, l'Intent di cui sopra verrebbe utilizzato senza alcun extra in modo da far sì che Media visualizzi l'app multimediale attualmente selezionata.

    • Schermata Home, Assistenti e Centro notifiche. Gli utenti possono accedere a Media per visualizzare l'app multimediale attualmente selezionata. In tutti i casi, viene attivato l'intento implicito senza extra.

    • Avvio applicazioni. Quando gli utenti selezionano un'app multimediale da Avvio applicazioni, l'intento sopra include l'extra CAR_EXTRA_MEDIA_COMPONENT , che contiene l'app multimediale selezionata. Media la designa come l'app appena selezionata e si connette ad essa. Per i dettagli, vedere la sezione seguente, Integrazione da Avvio app a Media.

Avvio app per integrazione multimediale

Le app multimediali non sono autorizzate a fornire attività annotate con la categoria android.intent.category.LAUNCHER . Di conseguenza, l'App Launcher (o il suo equivalente) deve implementare una logica speciale per gestire l'integrazione delle fonti multimediali:

  • L'App Launcher deve eseguire la scansione del sistema per i pacchetti che implementano MediaBrowserService.SERVICE_INTERFACE . Per questi pacchetti, App Launcher recupera l'icona del servizio simile a quella utilizzata per recuperare altre attività.

  • App Launcher combina quindi questi pacchetti con quelli che implementano le attività android.intent.category.LAUNCHER . Se un'app fornisce un'implementazione MediaBrowserService e un'attività di avvio, il servizio ha la precedenza.

    Al momento della stesura di questo articolo, nessuna app di origine multimediale può fornire un'attività di avvio.

  • Un esempio di questa logica è disponibile nel codice AOSP in AppLauncherUtils#getAllLauncherApps() .

Flusso di accesso e opzioni di configurazione

Le app multimediali possono includere un'attività Impostazioni ottimizzata per il veicolo. Tale attività può essere utilizzata per implementare flussi utente non indirizzati dalle API Android Media, ad esempio:

  • Registrazione
  • Disconnessione
  • Cambio di conto
  • Display a cui l'utente è attualmente connesso (se presente)
  • Configurazione del servizio

Flusso di accesso

Figura 3. Flusso di accesso

Questa attività Impostazioni viene dichiarata dall'app multimediale con il seguente filtro di intenti:

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

I media devono implementare la seguente logica:

  • Verifica che l'app multimediale attualmente selezionata includa un'attività con il filtro intent specificato.

  • In tal caso, consenti all'utente di accedere all'attività.

  • Se sono in vigore restrizioni UX per l'auto (ad esempio, l'auto è in movimento), questa opportunità dovrebbe essere disabilitata poiché l'attività Impostazioni non è un'interfaccia utente ottimizzata per il conducente.

Gestione degli errori e accesso richiesto

I contenuti multimediali interagiscono con le app multimediali tramite l'API Android Media Session. Come parte di questa API, Media riceve un oggetto PlaybackState , che comunica lo stato corrente dell'app multimediale.

Il processo di accesso inizia quando l'app multimediale modifica PlaybackState in STATE_ERROR , incluso un codice di errore specifico (vedi i dettagli di seguito). Quando ciò accade, Media visualizza la descrizione dell'errore e un'opportunità per passare a un'attività di accesso implementata dall'app multimediale.

Questo stesso flusso può essere utilizzato dalle app per segnalare altre situazioni di errore (ad esempio, un errore di connettività del server).

Gestione degli errori

Figura 4. Gestione degli errori

Nell'ambito della normale gestione degli errori PlaybackState , Media deve verificare il seguente input.

  • Codice di errore PlaybackState uguale a PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED . Ciò segnala che l'app multimediale richiede l'accesso per continuare l'operazione. È possibile ricevere altri codici di errore che indicherebbero altri tipi di situazioni di errore.

  • Il messaggio di errore PlaybackState (impostato dalle app multimediali utilizzando il metodo PlaybackStateCompat.Builder#setErrorMessage ) contiene una spiegazione leggibile (ad esempio, "Non hai effettuato l'accesso"). Questo messaggio deve essere visualizzato all'utente e deve essere ottimizzato per la distrazione di guida (DO).

  • Facoltativamente, PlaybackState può includere i seguenti extra (impostati dalle app multimediali con il metodo PlaybackStateCompat.Builder#setExtras ) con le chiavi seguenti.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL . Impostato su una stringa che contiene il messaggio leggibile da visualizzare sul pulsante toccato dall'utente per avviare il flusso di accesso.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT . Impostato con un PendingIntent da attivare quando l'utente fa clic sul pulsante sopra menzionato. Questo PendingIntent punta a un'attività di accesso personalizzata implementata dalla stessa app multimediale.

  • Lo stato PlaybackState è uguale a STATE_ERROR . Ciò segnala che non è possibile alcuna altra operazione fino al completamento dell'accesso.