开发者

Android: construct a File from an android.net.URI

开发者 https://www.devze.com 2022-12-21 23:43 出处:网络
I have an android.net.URI object (of the kind returned by onActivityResult after MediaStore.ACTION_VIDEO_CAPTURE): it looks开发者_如何学编程 like content://media/video/media/33.

I have an android.net.URI object (of the kind returned by onActivityResult after MediaStore.ACTION_VIDEO_CAPTURE): it looks开发者_如何学编程 like content://media/video/media/33.

I want to convert this into a File object, and only a File object - I need to pass it to another constructor that requires a File.

How can I convert a URI like this to a File object? If I try

File newFile = new File(myURI);

I get an error in Eclipse suggesting that I should convert the URI to a String. Supplying URI.getPath() in the constructor doesn't help either.

This relates to the 'How can I convert android.net.uri object to java.net.uri object?' question, which unfortunately seems to have no good answer, but I want a File object out, not a java uri.

I don't mind if I have to write it to a bytestream and back again - whatever is the best way.

Apologies if I'm cross-posting my own question, but I thought I might need to make things a bit clearer.


How can I convert a URI like this to a File object?

You can't, in a reliable, SDK-compliant fashion.

"If the table entry is a content: URI, you should never try to open and read the file directly (for one thing, permissions problems can make this fail). Instead, you should call ContentResolver.openInputStream() to get an InputStream object that you can use to read the data. "

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

You will need to modify the other code to accept and utilize an InputStream. Or, if the other code is supposed to be modifying the data, it will need to use an OutputStream, a topic also covered in the page linked to above.

0

精彩评论

暂无评论...
验证码 换一张
取 消