Sé la ruta absoluta de una imagen (por ejemplo, /sdcard/cats.jpg). ¿Hay alguna forma de obtener la uri de contenido para este archivo?
En realidad, en mi código, descargo una imagen y la guardo en una ubicación en particular. Para configurar la imagen en una instancia de ImageView, actualmente abro el archivo usando la ruta, obtengo los bytes y creo un mapa de bits y luego establezco el mapa de bits en la instancia de ImageView. Este es un proceso muy lento, en cambio, si pudiera obtener el contenido uri, podría usar el método muy fácilmente imageView.setImageUri(uri)
Respuestas:
Probar con:
O con:
fuente
Uri.fromFile
, no funcionará en Android 26+, debes usar el proveedor de archivosACTUALIZAR
Tenía la misma pregunta para mi actividad de explorador de archivos. Debe saber que el contenido para archivos solo admite datos de almacenamiento de medios como imagen, audio y video. Le estoy dando el código para obtener el contenido de la imagen uri seleccionando una imagen de sdcard. Prueba este código, tal vez te funcione ...
fuente
MediaStore.Images.Media
aMediaStore.Video.Media
, pero aún ninguna suerte.// Este código funciona para imágenes en 2.2, no estoy seguro si hay otros tipos de medios
fuente
La solución aceptada es probablemente la mejor opción para sus propósitos, pero para responder realmente la pregunta en la línea de asunto:
En mi aplicación, tengo que obtener el camino de los URI y obtener el URI de los caminos. El primero:
El último (que hago para videos, pero también se puede usar para Audio o Archivos u otros tipos de contenido almacenado sustituyendo MediaStore.Audio (etc.) por MediaStore.Video):
Básicamente, la
DATA
columna deMediaStore
(o la subsección que esté consultando) almacena la ruta del archivo, por lo que utiliza esa información para buscarla.fuente
OpenableColumns.DISPLAY_NAME & OpenableColumns.SIZE
si la aplicación de envío incluso sigue las "reglas". Descubrí que algunas aplicaciones importantes solo devuelven estos dos campos y no siempre el_data
campo. En el caso de que no tenga el campo de datos que normalmente contiene una ruta directa al contenido, primero debe leer el contenido y escribirlo en un archivo o en la memoria y luego tiene su propia ruta.Puede usar estas dos formas según el uso
Uri uri = Uri.parse("String file location");
o
Uri uri = Uri.fromFile(new File("string file location"));
He intentado en ambos sentidos y ambos trabajos.
fuente
La forma más fácil y sólida de crear Content Uri
content://
desde un archivo es usar FileProvider . El Uri proporcionado por FileProvider también se puede usar para proporcionar archivos Uri para compartir archivos con otras aplicaciones. Para obtener File Uri desde una ruta absolutaFile
puede usar DocumentFile.fromFile (nuevo Archivo (ruta, nombre)), se agrega en la Api 22 y devuelve nulo para las versiones a continuación.fuente
Es tarde, pero puede ayudar a alguien en el futuro.
Para obtener el URI de contenido para un archivo, puede usar el siguiente método:
FileProvider.getUriForFile(Context context, String authority, File file)
Devuelve el contenido URI.
Mira esto para aprender cómo configurar un
FileProvider
fuente
Obtención de la ID del archivo sin escribir ningún código, solo con los comandos de la CLI adb shell:
fuente
Permission Denial: Do not have permission in call getContentProviderExternal() from pid=15660, uid=10113 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
menos que esté rooteado.Es mejor usar una validación para admitir versiones anteriores a Android N, por ejemplo:
https://es.stackoverflow.com/questions/71443/reporte-crash-android-os-fileuriexposedexception-en-android-n
fuente
U puede intentar debajo del fragmento de código
fuente