Le app multimediali che utilizzano i modelli della libreria di app per auto possono personalizzare l'esperienza di navigazione e riproduzione dei contenuti multimediali, assicurandosi che sia ottimizzata per gli schermi delle auto e riduca al minimo le distrazioni durante la guida.
Questa guida presuppone che tu abbia già un'app multimediale che riproduce audio su uno smartphone
e che sia conforme all'architettura delle app multimediali Android. La
libreria di app per auto ti consente di sostituire l'esperienza in-app con
i modelli anziché con quelli creati utilizzando la struttura di dati
MediaBrowserdi Build media apps for cars. Devi comunque fornire un MediaSession per i controlli di riproduzione e un MediaBrowserService, che viene utilizzato per i consigli e altre esperienze intelligenti.
Configurare il file manifest dell'app
Oltre ai passaggi descritti in Utilizzare la libreria di app Android for Cars, le app multimediali basate su modelli devono soddisfare i seguenti requisiti:
Dichiarare il supporto delle categorie nel file manifest
L'app deve dichiarare la androidx.car.app.category.MEDIA
categoria di app per auto nel filtro per intent del relativo CarAppService.
<application>
...
<service
...
android:name=".MyCarAppService"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.MEDIA"/>
</intent-filter>
</service>
...
<application>
Per accedere a MediaPlaybackTemplate, l'app deve anche
dichiarare l'autorizzazione androidx.car.app.MEDIA_TEMPLATES nel suo
file manifest:
<manifest ...>
...
<uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
...
</manifest>
Impostare il livello API minimo dell'app per auto
Le app multimediali che utilizzano MediaPlaybackTemplate sono supportate solo nell'API CAL 8,
quindi assicurati che il Car App API level minimo sia impostato su 8.
<application ...>
...
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="8"/>
...
</application>
Dichiarare il supporto di Android Auto
Assicurati che nel file manifest dell'app sia incluso quanto segue:
<application>
...
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Poi, aggiungi la dichiarazione template a automotive_app_desc.xml nelle risorse XML. Dovrebbe avere il seguente aspetto:
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="media"/>
<uses name="template"/>
</automotiveApp>
Fornire un'icona di attribuzione
Assicurati di aggiungere un'icona di attribuzione per le app multimediali create utilizzando la libreria di app per auto.
Supportare le azioni vocali
Abilita i comandi vocali nella tua app per consentire agli utenti di completare le azioni comuni senza utilizzare le mani.
Per istruzioni di implementazione
più dettagliate, consulta Supportare le azioni vocali per i contenuti multimediali. Con un'app multimediale basata su modelli, se ricevi un comando vocale, non devi aggiornare MediaBrowserService con i risultati di ricerca. In alternativa, valuta la possibilità di aggiungere un'azione nel modello di riproduzione dei contenuti multimediali per consentire all'utente di trovare altri contenuti in base alla riproduzione o alla query di ricerca. Il supporto dei comandi vocali
è obbligatorio per soddisfare la VC-1 linea guida sulla qualità.
Creare il modello di riproduzione
Il MediaPlaybackTemplate mostra le informazioni sulla riproduzione dei contenuti multimediali nell'app multimediale della libreria di app per auto. Questo modello consente di impostare un'intestazione con un titolo e azioni personalizzabili, mentre le informazioni sui contenuti multimediali e i controlli di riproduzione vengono compilati dall'host in base allo stato di MediaSession dell'app.
Figura 1:
MediaPlaybackTemplate con un'azione di intestazione per aprire la coda nella parte superiore.
Questo esempio di codice mostra come creare un modello di riproduzione di esempio che imposta un'azione di intestazione che consente all'utente di passare a una schermata con la coda dei brani.
val playbackTemplate = MediaPlaybackTemplate.Builder()
.setHeader(
Header.Builder()
.setStartHeaderAction(Action.BACK)
.addEndHeaderAction(
Action.Builder()
.setTitle(model.context.getString(R.string.queue_button_title))
.setIcon(
CarIcon.Builder(
IconCompat.createWithResource(
model.context,
R.drawable.gs_queue_music_vd_theme_24,
))
.build())
.setOnClickListener(showQueueScreen())
.build())
.setTitle(model.context.getString(R.string.media_playback_view_title))
.build())
.build()
Quando utilizzi MediaPlaybackTemplate, registra un
MediaSession token utilizzando MediaPlaybackManager in your
CarAppService. In caso contrario, viene visualizzato un errore quando viene inviato un MediaPlaybackTemplate all'host.
import androidx.car.app.media.MediaPlaybackManager
…
override fun onCreateSession(sessionInfo: SessionInfo): Session {
return object : Session() {
…
init {
lifecycle.addObserver(
LifecycleEventObserver { _, event ->
if (event == ON_CREATE) {
val token = ... // MediaSessionCompat.Token
(carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
.registerMediaPlaybackToken(token)
}
...
}
)
}
}
}
.registerMediaPlaybackToken è necessario per esporre le informazioni e i controlli di riproduzione dei contenuti multimediali
ad Android Auto. È importante anche che l'host crei notifiche specifiche per i contenuti multimediali.
Organizzare i contenuti multimediali utilizzando i modelli
Per organizzare i contenuti multimediali per la navigazione, ad esempio brani o album, ti consigliamo di utilizzare la
SectionedItemTemplate,
che ti consente di utilizzare GridSection e
RowSection insieme per creare layout che combinano elenchi di immagini
ed elementi di testo.
Figura 2: un SectionedItemTemplate contenente un RowSection seguito da un GridSection
Utilizzare SectionedItemTemplate all'interno di TabTemplate
Un modo pratico per classificare i contenuti multimediali all'interno dell'app è utilizzare i
SectionedItemTemplate all'interno di un
TabTemplate.
val template =
SectionedItemTemplate.Builder()...build();
val tabTemplate =
TabTemplate.Builder(tabCallback)
.setTabContents(TabContents.Builder(template).build)
.setHeaderAction(Action.APP_ICON)
…
.build();
Per ulteriori dettagli su come progettare l'interfaccia utente dell'app multimediale utilizzando questi modelli, consulta App multimediali.
Navigare ai controlli di riproduzione
Quando si sfogliano i contenuti multimediali, è importante che l'utente possa passare rapidamente a MediaPlaybackTemplate con il minimo disturbo. Per soddisfare il
MFT-1 requisito di qualità, l'app deve avere un modo per accedere a
MediaPlaybackTemplate da tutte le schermate di navigazione dei contenuti multimediali.
Se utilizzi SectionedItemTemplate, puoi farlo aggiungendo un Floating Action Button (FAB) che ti porta alla schermata di riproduzione dei contenuti multimediali. Per altri modelli, un'azione di intestazione è un altro modo per farlo.