El del lado del cliente de un consumidor proveedor de contenido que pueda hacer algo como esto, para conseguir un InputStream adecuado para la lectura de la imagen:¿Devuelve una entrada asignada de memoria InputStream desde un proveedor de contenido?
InputStream is = getContentResolver().openInputStream(pictureUri);
Es un buen API, y lo hará en el lado del servidor, el actual contenido resultado proveedor de una llamada a:
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
// Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode)
}
pero lo que si la imagen asignada a la URI no se va a encontrar en el sistema de archivos, sino como un recurso de memoria, o se genera sobre la marcha.
¿Puedo crear una memoria mapeada File
o InputStream
, o cualquier otra cosa, por lo que no estoy obligado a guardar un archivo temporal en el disco, solo para poder devolverlo a mi proveedor de contenido?
Esa es una solución que podría funcionar, pero no lo que yo quiero hacerlo. Realmente quiero poder usar consistentemente el método 'ContentResolver # openInputStream()' para leer todo tipo de datos remotos. Independientemente de cómo el servidor crea/obtiene los datos. Se trata de no exponer la implementación del servidor al cliente. – PeyloW
@PeyloW ¿Encontraste una solución a esto? Estoy buscando una solución también. – Sunny
@Sunny Ninguno que no es un truco. Así que terminé guardando archivos temporales y enviando descriptores de archivos. – PeyloW