미디어 아트워크 항목은 ContentResolver.SCHEME_CONTENT
또는 ContentResolver.SCHEME_ANDROID_RESOURCE
를 사용하여 로컬 URI로 전달해야 합니다. 이 로컬 URI는 비트맵이나 벡터 드로어블로 확인되어야 합니다.
콘텐츠 계층 구조의 항목을 나타내는
MediaDescriptionCompat
객체의 경우setIconUri
를 통해 URI를 전달합니다.재생 중인 항목을 나타내는
MediaMetadataCompat
객체의 경우 다음 키 중 하나를 사용하여putString
을 통해 URI를 전달합니다.
앱 리소스에서 아트워크 제공
앱의 리소스에서 드로어블을 제공하려면 다음 형식으로 URI를 전달합니다.
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
이 스니펫은 리소스 ID에서 이 형식의 URI를 만드는 방법을 보여줍니다.
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()
콘텐츠 제공업체를 사용하여 아트워크 제공
다음 단계에서는 콘텐츠 제공자를 사용하여 웹 URI에서 아트를 다운로드하고 로컬 URI를 통해 노출하는 방법을 설명합니다. 전체 예는 범용 Android 뮤직 플레이어 샘플 앱에서 openFile
구현과 주변 메서드를 참고하세요.
웹 URI에 상응하는
content://
URI를 빌드합니다. 미디어 브라우저 서비스와 미디어 세션은 이 콘텐츠 URI를 Android Auto 및 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() }
자바
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
구현에서 상응하는 URI의 파일이 존재하는지 확인합니다. 존재하지 않으면 이미지 파일을 다운로드하고 캐시합니다. 이 코드 스니펫은 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) }
자바
@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); }