使用ACTION_GET_CONTENT
意图选择图像时,我得到一个无法打开文件的URI。如果我尝试打开文件,请执行以下操作:
InputStream in = new FileInputStream(new File(uri.getPath()));
它提供以下例外:
03-11 15:14:36.132 20557-20557/my.package W/System.err﹕ java.io.FileNotFoundException: /document/image:9537: open failed: ENOENT (No such file or directory)
03-11 15:14:36.138 20557-20557/my.package W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:456)
03-11 15:14:36.138 20557-20557/my.package W/System.err﹕ at java.io.FileInputStream.<init>(FileInputStream.java:76)
/document/image:9537
似乎确实是一条错误的路径,但我如何获得正确的路径?
我使用这个逻辑来打开图像选择器:
Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("return-data", false);
startActivityForResult(Intent.createChooser(photoPickerIntent, "Complete action using"), PICK_FROM_FILE);
并在onActivityResult中检索Uri,如下所示:
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
....
Uri uri = data.getData();
我需要让文件进行解码以使其变小。
答案 0 :(得分:3)
如果我尝试打开文件,请执行以下操作:
这对大多数现代Android设备都不起作用。最有可能的是,您收到了content:
Uri
。这在较新版本的Android上相当正常。 Android的未来版本可能会阻止file:
Uri
值。
我需要让文件进行解码以使其变小。
没有与给定Uri
关联的文件。 Uri
可能指向:
BLOB
列中保存的字节流使用ContentResolver
和openInputStream()
获取InputStream
指向的内容Uri
。然后,将其传递给解码逻辑,例如BitmapFactory
及其decodeStream()
方法。