studio - cómo obtener un uri de un recurso de imagen en Android
obtener la ruta de una imagen android studio (5)
Necesito abrir una intención para ver una imagen de la siguiente manera:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("@drawable/sample_1.jpg");
intent.setData(uri);
startActivity(intent);
El problema es que Uri uri = Uri.parse("@drawable/sample_1.jpg");
Es incorrecto.
Aquí hay una solución limpia que aprovecha al android.net.Uri
clase android.net.Uri
través de su patrón Builder
, evitando la composición repetida y la descomposición de la cadena URI, sin depender de cadenas codificadas ni ideas ad hoc sobre la sintaxis 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();
Desea el URI del recurso de imagen y R.drawable.goomb
es un recurso de imagen. La función de generador crea el URI que está solicitando:
String resourceScheme = "res";
Uri uri = new Uri.Builder()
.scheme(resourceScheme)
.path(String.valueOf(intResourceId))
.build();
El formato es:
"android.resource://[package]/[res id]"
[paquete] es tu nombre de paquete
[res id] es el valor de la identificación del recurso, por ej. R.drawable.sample_1
para unirlo, usa
Uri path = Uri.parse("android.resource://your.package.name/" + R.drawable.sample_1);
Para aquellos que tienen un error, puede estar ingresando el nombre del paquete equivocado. Solo usa este método.
public static Uri resIdToUri(Context context, int resId) {
return Uri.parse(Consts.ANDROID_RESOURCE + context.getPackageName()
+ Consts.FORESLASH + resId);
}
Dónde
public static final String ANDROID_RESOURCE = "android.resource://";
public static final String FORESLASH = "/";
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) );
}