นี่คือโซลูชันที่สะอาดซึ่งใช้ประโยชน์จากandroid.net.Uri
คลาสอย่างเต็มที่ผ่านBuilder
รูปแบบโดยหลีกเลี่ยงการจัดองค์ประกอบซ้ำและการสลายตัวของสตริง URI โดยไม่ต้องอาศัยสตริงฮาร์ดโค้ดหรือแนวคิดเฉพาะกิจเกี่ยวกับไวยากรณ์ URI
Resources resources = context.getResources();
Uri uri = new Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority(resources.getResourcePackageName(resourceId))
.appendPath(resources.getResourceTypeName(resourceId))
.appendPath(resources.getResourceEntryName(resourceId))
.build();
สง่างามมากขึ้นเล็กน้อยด้วย Kotlin:
fun Context.resourceUri(resourceId: Int): Uri = with(resources) {
Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority(getResourcePackageName(resourceId))
.appendPath(getResourceTypeName(resourceId))
.appendPath(getResourceEntryName(resourceId))
.build()
}