Answers:
格式为:
"android.resource://[package]/[res id]"
[package]是您的包裹名称
[res id]是资源ID的值,例如R.drawable.sample_1
缝在一起,使用
Uri path = Uri.parse("android.resource://your.package.name/" + R.drawable.sample_1);
这是一个干净的解决方案,可以充分利用 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();
public static Uri resourceToUri(Context context, int resID) {
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.getResources().getResourcePackageName(resID) + '/' +
context.getResources().getResourceTypeName(resID) + '/' +
context.getResources().getResourceEntryName(resID) );
}
对于有错误的用户,您可能输入了错误的程序包名称。只需使用此方法。
public static Uri resIdToUri(Context context, int resId) {
return Uri.parse(Consts.ANDROID_RESOURCE + context.getPackageName()
+ Consts.FORESLASH + resId);
}
哪里
public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FORESLASH = "/";
您需要图像资源的URI,并且R.drawable.goomb
它是图像资源。Builder函数创建您要求的URI:
String resourceScheme = "res";
Uri uri = new Uri.Builder()
.scheme(resourceScheme)
.path(String.valueOf(intResourceId))
.build();
根据以上答案,我想分享一个kotlin示例,说明如何为项目中的任何资源获取有效的Uri。我认为这是最好的解决方案,因为您不必在代码中键入任何字符串,也不必冒着输入错误的风险。
val resourceId = R.raw.scannerbeep // r.mipmap.yourmipmap; R.drawable.yourdrawable
val uriBeepSound = Uri.Builder()
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority(resources.getResourcePackageName(resourceId))
.appendPath(resources.getResourceTypeName(resourceId))
.appendPath(resources.getResourceEntryName(resourceId))
.build()