将Uri转换为文件路径但无法在nexus 4中打开它

时间:2013-05-13 08:05:25

标签: android uri fileinputstream

我在专辑中打开一张照片并获得Uri。然后我将Uri转换为文件路径。它在日志中显示为类似mnt / storage / emulated / 0 / xxx.jpg的内容。我将Uri转换为文件路径,如:

Cursor cursor = GlobalObjectManager.getInstance().getContext().getContentResolver()
                    .query(filePathUri, null, null, null, null);

int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
fileName = cursor.getString(column_index); 

问题是,当我用函数打开文件时,它会捕获FileNotFoundException。

String path = "mnt/storage/emulated/0/xxx.jpg";
FileInputStream in = new FileInputStream(path);

该代码在Android 2.3-4.1的其他设备上运行良好。 据我所知,我的Nexus 4运行Android 4.2,mnt / storage / emulated / 0 /适用于多用户。

在我的应用程序中,我必须使用FileInputStream()函数来读取文件开头的字节数据。

有谁能告诉我如何解决这个问题?谢谢!

好的我修好了。我犯了一个大错!我在存储/不必要的前面添加了mnt /,这就是错误。

2 个答案:

答案 0 :(得分:0)

我相信你看到了/storage/emulated/0。我们也看到了这个问题,它似乎与多个SD卡的新/存储处理有关,我认为它是在Android 4.1中引入的,但可能是后来的。如果你看,你会发现文件系统上不存在/storage/emulated/0,甚至不是符号链接。谁知道系统正在使用该路径或者那里有什么技巧。

解决方法是:

fileName = new File(cursor.getString(column_index)).getCanonicalPath();

答案 1 :(得分:0)

我认为你不应该有“mnt”,这就是说,你可以这样编码:

String path = "mnt/storage/emulated/0/xxx.jpg";

FileInputStream in = new FileInputStream(path);