如何在android中获取uri的图像资源

时间:2011-02-04 09:06:50

标签: 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");不正确。

6 个答案:

答案 0 :(得分:132)

格式为:

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

答案 1 :(得分:51)

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

答案 2 :(得分:48)

这是一个干净的解决方案,它通过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();

答案 3 :(得分:8)

对于有错误的人,您可能输入了错误的包名称。只需使用此方法。

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 = "/";

答案 4 :(得分:4)

您需要图像资源的URI,而R.drawable.goomb是图像资源。 Builder函数创建您要求的URI:

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

答案 5 :(得分:1)

基于上述答案,我想分享一个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()