2011-02-04 2 views

Répondre

119

Le format est le suivant:

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

[package] est le nom de votre package

[res id] est valeur de l'ID de ressource, par exemple R.drawable.sample_1

à ce point ensemble, utilisez

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

+0

Est-ce que ça marche pour quelqu'un ?? –

+4

il a obtenu 21 upvotes, donc je suppose oui – Axarydax

+0

Uri path = Uri.parse ("android.resource: //net.londatiga.android.twitpic/" + R.drawable.icon); \t Chaîne mpath = path.toString(); Je reçois aucune telle erreur de dossier ou de répertoire quand je fais ceci –

9

Pour les erreurs ayant, vous pouvez saisir le nom du mauvais paquet. Utilisez simplement cette méthode.

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

Avez-vous vraiment fait une constante pour un préfixe? –

+0

@SartherisStormhammer Oui :), bien que j'utilise habituellement la constante du système pour previsible;) – 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

Vous voulez l'URI de la ressource d'image et R.drawable.goomb est une ressource d'image. La fonction Builder crée l'URI que vous demandez:

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

Donc, vous passez quelque chose comme "18" au chemin. Cela semble incorrect –

+0

@NickCardoso R.drawable.Goomba est le drawable que j'ai dans mon dossier de ressources. Si sa valeur est 18, cela rend-il l'affectation incorrecte? – roide

+0

Bien sûr que oui. https://developer.android.com/reference/android/net/Uri.Builder.html#path(java.lang.String) L'ID du fichier R doit être utilisé pour résoudre un chemin réel. –

31

Voici une solution propre, qui tire pleinement parti de la classe android.net.Uri via son modèle Builder, évitant ainsi la composition répétée et la décomposition de la chaîne URI, sans compter sur Hard- chaînes codées ou idées ad hoc sur la syntaxe 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(); 
Questions connexes