2010-02-28 2 views
5

У меня есть объект android.net.URI (такого типа, который возвращался onActivityResult после MediaStore.ACTION_VIDEO_CAPTURE): он выглядит как контент: // media/video/media/33.Android: создать файл из android.net.URI

Я хочу преобразовать это в объект File и только объект File - мне нужно передать его другому конструктору, для которого требуется файл.

Как я могу преобразовать URI, как это, в объект File? Если я пытаюсь

File newFile = new File(myURI); 

Я получаю сообщение об ошибке в Eclipse, предполагая, что я должен преобразовать URI в строку. Поставка URI.getPath() в конструкторе тоже не помогает.

Это относится к вопросу 'How can I convert android.net.uri object to java.net.uri object?', который, к сожалению, кажется, не имеет хорошего ответа, но я хочу, чтобы объект File вышел из строя, а не java uri.

Я не возражаю, если мне нужно записать его в поток и обратно - что бы ни было лучшим.

Извинения, если я перекрестно размещаю my own question, но я подумал, что мне может потребоваться сделать что-то более ясное.

+0

Возможный дубликат http://stackoverflow.com/questions/2975197/convert-file-uri-to-file-in-android –

ответ

6

Как можно преобразовать URI, как это, в файл ?

Вы не можете надежно, с SDK-совместимым способом.

«Если запись в таблице является содержимым: URI, вы никогда не должны пытаться открывать и читать файл напрямую (с одной стороны, проблемы с разрешениями могут привести к сбою). Вместо этого вы должны вызвать ContentResolver.openInputStream() для получить объект InputStream, который можно использовать для чтения данных ".

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

Вам нужно будет изменить другой код, чтобы принять и использовать в InputStream. Или, если предполагается, что другой код будет изменять данные, ему необходимо будет использовать OutputStream, что также рассматривается на странице, связанной выше.

+0

Я не думаю, что могу его изменить: это MediaFileSource. http://code.google.com/apis/gdata/javadoc/com/google/gdata/data/media/MediaFileSource.html#constructor_summary Могу ли я взять InputStream и как-нибудь записать его в файл? – AP257

+0

Что-то вроде этого, может быть? http://www.exampledepot.com/egs/java.io/CopyFile.html – AP257

+0

Не используйте 'MediaFileSource'. Используйте «MediaStreamSource». – CommonsWare

Смежные вопросы