Obtener la ruta absoluta del archivo a partir del URI de contenido para las imágenes buscadas
Estoy intentando compartir imágenes de otras aplicaciones en mi aplicación utilizando la intención implícita ACTION_SEND .
Al compartir imágenes de búsqueda desde el navegador Chrome, la aplicación recibe una intención con un URI de contenido como este:
content://com.android.chrome.FileProvider/images/screenshot/1457448067808912906311.jpg
¿Cómo puedo obtener la ruta del archivo de este tipo de URI de contenido? Todas las demás aplicaciones como Facebook y Google+ lo están haciendo. Estoy usando FileChooser para obtener la ruta del archivo de otros tipos de URI de contenido (por ejemplo, de la Galería).
Intenté buscar por todas partes, sin mucha ayuda. ¿Alguien puede sugerir cómo trabajar con estos URI de contenido?
Si es absolutamente necesario una copia local del archivo, necesitará abrir la InputStream
copia del contenido en un archivo local al que conozca la ruta y luego continuar desde allí. Nota al margen: La guayaba ByteStreams#copy
es una manera fácil de lograr esto.
Por supuesto, este archivo ya no está respaldado por la fuente Uri original, por lo que no creo que esto sea lo que desea. En su lugar, deberías trabajar con la API prevista para Uri. Eche un vistazo al marco de acceso al almacenamiento
Editar
Así es como puede obtener una InputStream
de suUri
InputStream inputStream = getContentResolver().openInputStream(uri);
¿Cómo puedo obtener la ruta del archivo de este tipo de URI de contenido?
No es necesario, ya que no es necesario que haya ningún archivo detrás del archivo Uri
, y mucho menos uno al que pueda acceder. Eso Uri
podría indicar:
- Un archivo local en almacenamiento externo
- Un archivo local en el almacenamiento interno de la otra aplicación
- Un archivo local en almacenamiento extraíble
- Un archivo local que está cifrado y debe descifrarse sobre la marcha
- Un flujo de bytes contenidos en una
BLOB
columna en una base de datos. - Un fragmento de contenido que la otra aplicación debe descargar primero
- ...etcétera
Todas las demás aplicaciones como Facebook y Google+ lo están haciendo.
No, ellos no son. Están usando ContentResolver
y:
openInputStream()
para leer los bytes asociados con el contenidogetType()
para obtener el tipo MIME asociado con el contenidoquery()
yOpenableColumns
para obtener el tamaño y el nombre para mostrar asociados con el contenido