web-dev-qa-db-fra.com

comment obtenir l'URI d'une ressource image dans android

Je dois ouvrir l'intention de visualiser une image comme suit:

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("@drawable/sample_1.jpg");
intent.setData(uri);
startActivity(intent);

Le problème est que Uri uri = Uri.parse("@drawable/sample_1.jpg"); est incorrect.

87
user602874

Le format est:

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

[paquet] est le nom de votre paquet

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

pour coudre ensemble, utilisez

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

133
Axarydax
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) );
    }
53
xnagyg

Voici une solution propre qui exploite pleinement le Android.net.Uri classe via son modèle Builder , en évitant la composition et la décomposition répétées de la chaîne d'URI, sans s'appuyer sur des chaînes codées en dur ou des idées ad hoc sur la syntaxe de l'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();
52
Uli

Pour ceux qui ont une erreur, vous entrez peut-être un nom de package incorrect. 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 = "/";
8
sandalone

Vous voulez l'URI de la ressource image et R.drawable.goomb est une ressource 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();
4
roide

Sur la base des réponses ci-dessus, je souhaite partager un exemple Kotlin sur la façon d'obtenir un Uri valide pour toute ressource de votre projet. Je pense que c'est la meilleure solution car vous n'avez pas à taper de chaîne dans votre code et vous risquez de le taper à tort.

    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()
2
Sergio