Uri que te uri

Hola

Me estaba peleando con la camara de Android, y tras “invertir” todo el dia he descubierto una cosilla que a lo mejor os interesa saber.

Estaba llamando a un intent de camara para que me devolviese un fichero, para ello, debemos pasarle un extra con nombre MediaStore.EXTRA_OUTPUT que contenga un objecto Uri apuntando al nombre.

Pues bien, hay varias formas de generar un Uri con métodos de clase:

a) Uri.fromFile(File newUri)

b) Uri.parse(String newUri)

Parece que ambos deberian generar el mismo contenido, pero…. CATACROCKER!

Uri.parse(“/mnt/sdcard/img/photo.jpg”) genera un objeto uri descafeinado. Vamos, le rellena el campo Uri.mPath y pa casa.

Uri.fromFile(new File(“/mnt/sdcard/img/photo.jpg”)) genera un objeto uri con todas sus propiedades y vitaminas.

Pues si al intent de la cámara le pasas el Uri descafeinado, no funciona, si le pasas el segundo (creado con FIle) funciona perfectamente.

Nada, sólo quería compartirlo.

Update 28-agosto-2012

Como dice kix2902 en los comentarios, el Uri.parse funciona con un path del tipo “file://…”.  Lo que no entiendo es por que con una uri incorrecta parsea mal y se queda tan ancho en vez de lanzar una excepción como toca, o al menos no aparece una indicación en la documentación al respecto.

 

3 Comments

  1. kix2902 · August 27, 2012 Reply

    Hola Sergi, para que te funcione el metodo parse debes pasarle la ruta de la siguiente forma:
    Uri.parse(“file:///mnt/sdcard/img/photo.jpg”);

    Saludos y espero te sea mas facil ahora 😉

  2. Fran · November 4, 2012 Reply

    Gente, ¿me podeis echar una mano?. No consigo enviar en .mp3.
    Mi codigo es:

    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType(“audio/*”);
    sendIntent.putExtra (Intent.EXTRA_STREAM, Uri.parse(“file://”+”/res/raw/enabrilaguasmil.mp3”));
    startActivity(Intent.createChooser(sendIntent, “Title:”));

    El arcivo le tengo en la carpera Resources/raw, pero la ruta me marca como res/raw. He intentado de mil maneras pero no encuentro la forma.

    Un saludo y gracias.

  3. sergi · November 4, 2012 Reply

    Fran, si vas a almacenar el mp3 en resources, tratalo como un resource. Si quieres acceder via uri, almacenalo en assets.

Leave a Reply