2010-02-28 13 views
5

Tengo un objeto android.net.URI (del tipo devuelto por onActivityResult después de MediaStore.ACTION_VIDEO_CAPTURE): parece contenido: // media/video/media/33.Android: construir un archivo desde un android.net.URI

Quiero convertir esto en un objeto File, y solo un objeto File - Necesito pasarlo a otro constructor que requiera un archivo.

¿Cómo puedo convertir un URI como este en un objeto File? Si intento

File newFile = new File(myURI); 

consigo un error en Eclipse que sugiere que debería convertir el URI en una cadena. El suministro de URI.getPath() en el constructor tampoco ayuda.

Esto se relaciona con la pregunta 'How can I convert android.net.uri object to java.net.uri object?', que desafortunadamente parece no tener una buena respuesta, pero quiero un objeto File out, no un java uri.

No me importa si tengo que escribirlo en un bit de prueba y viceversa, sea cual sea la mejor manera.

Disculpas si estoy haciendo una publicación cruzada my own question, pero pensé que podría necesitar aclarar un poco las cosas.

+0

Posible duplicado de http://stackoverflow.com/questions/2975197/convert-file-uri-to-file-in-android –

Respuesta

6

¿Cómo puedo convertir un URI como esta para un objeto archivo?

No se puede, de manera confiable, compatible con SDK.

"Si la entrada de la tabla es un contenido: URI, nunca intente abrir y leer el archivo directamente (por un lado, los problemas de permisos pueden hacer que esto falle). En su lugar, debe llamar a ContentResolver.openInputStream() para obtener un objeto InputStream que se puede utilizar para leer los datos ".

(de http://developer.android.com/guide/topics/providers/content-providers.html)

usted tendrá que modificar el otro código para aceptar y utilizar un InputStream. O bien, si se supone que el otro código está modificando los datos, deberá usar un OutputStream, un tema que también se cubre en la página vinculada anteriormente.

+0

No creo que pueda modificarlo: es un MediaFileSource. http://code.google.com/apis/gdata/javadoc/com/google/gdata/data/media/MediaFileSource.html#constructor_summary ¿Puedo tomar InputStream y escribirlo en un archivo de alguna manera? – AP257

+0

¿Algo así como tal vez? http://www.exampledepot.com/egs/java.io/CopyFile.html – AP257

+0

No use 'MediaFileSource'. Use 'MediaStreamSource'. – CommonsWare

Cuestiones relacionadas