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
MediaDescriptionCompat
nesneleri için URI'yisetIconUri
üzerinden iletin.Çalınan öğeyi temsil eden
MediaMetadataCompat
nesneleri 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.openFile
uygulamanı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); }