我在专辑中打开一张照片并获得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 /,这就是错误。
答案 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);