如何在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();