Pregunta

Estoy tratando de obtener un objeto FileInputStream en una imagen que el usuario selecciona en la galería de fotos. Esta es la URI androide devuelto por android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

content://media/external/images/media/3

Cuando intento de construir un URI objeto Java de este objeto, consigo un IllegalArgumentException con la descripción de excepción esquema de archivo de espera en URI: contenido: // media / / imágenes / medios externos / 3 mientras que el androide URI muestra el esquema como contenido

Actualizar : Nunca encontramos una solución para la pregunta original. Sin embargo, si desea que el flujo de bytes de una imagen en la galería de imágenes, esta pieza de código que va a hacer.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
¿Fue útil?

Solución

Se puede usar el método de la toString Uri androide en combinación del constructor basado String del URI Java.

android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());

Android URI | Java URI

Otros consejos

Encontrados la forma correcta de abrir InputStream de contenido URI:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

Eso es todo!

Hay una solución a su pregunta original (convertir a Uri URI):

  1. Obtener la ruta del archivo real (mira este código: Obtener el nombre de archivo y la ruta de URI de MediaStore )

  2. Obtener el URI utilizando la ruta real y el constructor: URI (cadena URI)

Si necesita más detalles, mira aquí:

Cómo eliminar un vídeo grabado con una intención con ACTION_VIDEO_CAPTURE?

He votado por la respuesta de jgilrincon. No puedo comentar debido a la baja reputación, y aquí va algo de información adicional - se puede utilizar FileHelper.java del proyecto Apache Cordova, tiene funciones que necesita para el manejo de cadenas URI del archivo, teniendo en cuenta MediaStore también (y la carpeta de aplicaciones activos)

Particularmente este método proporciona InputStream de Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

Desde la CONSTRUIR cadena no funciona has necesitado mera construcción usted mismo?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

También puede ser que desee comprobar que su conseguir datos válidos fuera de clase Android URI. Los documentos que se enumeran en mi otra respuesta discuten cómo lo hace prácticamente ninguna comprobación de errores. Si hay un error de hecho la clase sólo escupe basura de todos modos y no lanza ninguna excepción. Que muy probablemente podría ser la razón por la clase de Java que realiza la validación hacer es lanzar una excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top