0

我在相册中打开一张图片并获取 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() 函数来读取文件开头的字节数据。

谁能告诉我如何修复这个错误?谢谢!

好的,我修复它。我犯了一个大错误!我不必要地在 storage/ 前面添加了 mnt/ ,它需要错误。

4

2 回答 2

0

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

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

FileInputStream in = new FileInputStream(path);

于 2013-09-24T10:31:18.087 回答
0

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

解决方法是:

fileName = new File(cursor.getString(column_index)).getCanonicalPath();
于 2013-06-12T23:06:28.660 回答