如何在Android中获得一个图像资源的URI

我需要打开一个意图来查看图像,如下所示:

Intent intent = new Intent(Intent.ACTION_VIEW); Uri uri = Uri.parse("@drawable/sample_1.jpg"); intent.setData(uri); startActivity(intent); 

问题是, Uri uri = Uri.parse("@drawable/sample_1.jpg"); 是不正确的。

格式是:

"android.resource://[package]/[res id]"

[包]是你的包名

[res id]是资源ID的 ,例如R.drawable.sample_1

把它缝在一起,使用

Uri path = Uri.parse("android.resource://your.package.name/" + R.drawable.sample_1);

 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) ); } 

这是一个干净的解决scheme,它通过Builder模式充分利用了android.net.Uri类,避免了对URIstring的重复组合和分解,而不依赖于硬编码的string或关于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(); 

对于有错误的人,您可能会input错误的软件包名称。 只要使用这个方法。

 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函数创build您要求的URI:

 String resourceScheme = "res"; Uri uri = new Uri.Builder() .scheme(resourceScheme) .path(String.valueOf(intResourceId)) .build();