2011-02-04 1 views
72

мне нужно открыть намерение просмотреть изображение следующим образом:как получить УИР ресурсом изображения в андроид

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"); неверен.

ответ

119

Формат:

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

[пакет] ваш пакет имя

[Рез ID] является значение ID ресурса, например, R.drawable.sample_1

сшить вместе, используйте

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

+0

Работает ли это на кого-либо? –

+4

он получил 21 upvotes, поэтому я думаю, да – Axarydax

+0

Uri path = Uri.parse ("android.resource: //net.londatiga.android.twitpic/" + R.drawable.icon); \t Строка mpath = путь.toString(); Я получаю Нет такой файл или ошибку каталога, когда я делаю это –

9

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

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

Вы действительно сделали константу для foreslash? –

+0

@SartherisStormhammer Да :), хотя я обычно использую системную константу для foreslash;) – sandalone

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

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

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

Итак, вы проходите что-то вроде «18» до пути. Это кажется неправильным –

+0

@NickCardoso R.drawable.goomba - это то, что у меня есть в моей папке ресурсов. Если его значение равно 18, делает ли это неправильным назначение? – roide

+0

Конечно. https://developer.android.com/reference/android/net/Uri.Builder.html#path(java.lang.String) Идентификатор в файле R должен использоваться для разрешения реального пути. –

31

Вот чистое решение, которое в полной мере использует 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();