Medya öğelerinin resimleri, ContentResolver.SCHEME_CONTENT veya ContentResolver.SCHEME_ANDROID_RESOURCE kullanılarak yerel URI olarak iletilmelidir. Bu yerel URI, bit eşlem veya vektör çizilebilir öğesi olarak çözümlenmelidir.
İçerik hiyerarşisindeki öğeleri temsil eden
MediaDescriptionCompatnesneleri için URI'yisetIconUriüzerinden iletin.Çalınan öğeyi temsil eden
MediaMetadataCompatnesneleri için URI'yiputStringüzerinden iletmek üzere aşağıdaki anahtarlardan herhangi birini kullanın:
Uygulamanızın kaynaklarından resim sağlama
Uygulamanızın kaynaklarından çizilebilir öğeler sağlamak için aşağıdaki biçimde bir URI iletin:
android.resource://PACKAGE_NAME/RESOURCE_TYPE/RESOURCE_NAME
// Example URI - note that there is no file extension at the end of the URI
android.resource://com.example.app/drawable/example_drawable
Bu snippet, kaynak kimliğinden bu biçimde bir URI'nin nasıl oluşturulacağını gösterir:
val resources = context.resources
val resourceId: Int = R.drawable.example_drawable
Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority(resources.getResourcePackageName(resourceId))
.appendPath(resources.getResourceTypeName(resourceId))
.appendPath(resources.getResourceEntryName(resourceId))
.build()
İçerik sağlayıcı kullanarak resim sağlama
Bu adımlarda, bir web URI'sinden resimlerin nasıl indirileceği ve içerik sağlayıcı kullanılarak yerel bir URI üzerinden nasıl gösterileceği açıklanmaktadır. Tam bir örnek için Universal Android Music Player örnek uygulamasında openFile ve çevreleyen yöntemlerin uygulanmasına bakın.
Web URI'sine karşılık gelen bir
content://URI'si oluşturun. Medya tarayıcı hizmeti ve medya oturumu, bu içerik URI'sini Android Auto ve AAOS'ye iletir.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(); }ContentProvider.openFileuygulamanızda, ilgili URI için bir dosyanın olup olmadığını kontrol edin. Aksi takdirde, resim dosyasını indirip önbelleğe alın. Bu kod snippet'inde Glide kullanılıyor.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); }