как получить URI ресурса изображения в Android - PullRequest
85 голосов
/ 04 февраля 2011

Мне нужно открыть намерение для просмотра изображения следующим образом:

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 ]

132 голосов
/ 04 февраля 2011

Формат:

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

51 голосов
/ 06 января 2015
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) );
    }
48 голосов
/ 13 июля 2016

Вот чистое решение, которое полностью использует класс 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();
8 голосов
/ 06 июня 2014

Для тех, кто имеет ошибку, вы можете ввести неправильное имя пакета.Просто используйте этот метод.

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 голосов
/ 08 марта 2016

Требуется URI ресурса изображения, а R.drawable.goomb - это ресурс изображения.Функция Builder создает запрашиваемый URI:

String resourceScheme = "res";
Uri uri = new Uri.Builder()
  .scheme(resourceScheme)
  .path(String.valueOf(intResourceId))
  .build();
1 голос
/ 07 марта 2019

Основываясь на ответах выше, я хочу поделиться примером 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...