Les illustrations d'éléments multimédias doivent être transmises sous la forme d'un URI local en utilisant ContentResolver.SCHEME_CONTENT
ou ContentResolver.SCHEME_ANDROID_RESOURCE
. Cet URI local doit correspondre à un bitmap ou un drawable vectoriel dans les ressources de l'application. Pour les objets MediaDescriptionCompat
représentant des éléments de la hiérarchie de contenu, transmettez l'URI via setIconUri
.
Pour les objets MediaMetadataCompat
représentant l'élément en cours de lecture, utilisez l'une des clés suivantes pour transmettre l'URI via putString
:
MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI
MediaMetadataCompat.METADATA_KEY_ART_URI
MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI
Ces étapes décrivent comment télécharger une illustration à partir d'un URI Web et comment l'exposer via un URI local. Pour obtenir un exemple complet, consultez l'implémentation de openFile
et des méthodes proches dans l'application exemple Universal Android Music Player.
Créez un URI
content://
correspondant à l'URI Web. Le service de navigateur multimédia et la session multimédia doivent transmettre cet URI de contenu à Android Auto et à Android Automotive OS (AAOS).Kotlin
fun Uri.asAlbumArtContentURI(): Uri { return Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) .authority(CONTENT_PROVIDER_AUTHORITY) .appendPath(this.getPath()) // Make sure you trust the URI .build() }
Java
public static Uri asAlbumArtContentURI(Uri webUri) { return new Uri.Builder() .scheme(ContentResolver.SCHEME_CONTENT) .authority(CONTENT_PROVIDER_AUTHORITY) .appendPath(webUri.getPath()) // Make sure you trust the URI! .build(); }
Dans votre implémentation de
ContentProvider.openFile
, vérifiez s'il existe un fichier pour l'URI correspondant. Si ce n'est pas le cas, téléchargez et mettez en cache le fichier image. Cet extrait de code utilise Glide.Kotlin
override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? { val context = this.context ?: return null val file = File(context.cacheDir, uri.path) if (!file.exists()) { val remoteUri = Uri.Builder() .scheme("https") .authority("my-image-site") .appendPath(uri.path) .build() val cacheFile = Glide.with(context) .asFile() .load(remoteUri) .submit() .get(DOWNLOAD_TIMEOUT_SECONDS, TimeUnit.SECONDS) cacheFile.renameTo(file) file = cacheFile } return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY) }
Java
@Nullable @Override public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException { Context context = this.getContext(); File file = new File(context.getCacheDir(), uri.getPath()); if (!file.exists()) { Uri remoteUri = new Uri.Builder() .scheme("https") .authority("my-image-site") .appendPath(uri.getPath()) .build(); File cacheFile = Glide.with(context) .asFile() .load(remoteUri) .submit() .get(DOWNLOAD_TIMEOUT_SECONDS, TimeUnit.SECONDS); cacheFile.renameTo(file); file = cacheFile; } return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY); }
Pour en savoir plus sur les fournisseurs de contenu, consultez Créer un fournisseur de contenu.