无法使用 ContentResolver.openInputStream(Uri) 读取文件

Cannot read file using ContentResolver.openInputStream(Uri)

对于phone内部存储中存在的文件,路径为/system/data/recf/pic.jpg,使用openInputStream()方法构造inputStream抛出FileNotFoundException。

这就是我在做的-

ContentResolver cr = context.getContentResolver();
InputStream inputStream = null;
Uri filename = Uri.parse("file:///system/data/recf/pic.jpg");
inputStream = cr.openInputStream(filename);

但它抛出 FileNotFoundException。我已经检查过该文件是否存在。纠结了好久,求助。谢谢

我可以看到您正在解析路径的硬编码字符串

Uri filename = Uri.parse("file:///system/data/recf/pic.jpg");

并且您正在传递带有三重正斜杠的文件。这可能是问题所在。 首先你需要确保路径是正确的。您可以为此使用文件对象来验证实际上是否存在具有提供路径的文件。您可以使用以下代码进行检查。

File file  = new File("Your path");
if(file.exists()) {
   // if this is true that means file exists in actual then
   //make uri and get the stream as you are already doing
}

这个问题很可能属于路径。希望我的回答对你有帮助。

设备的内部存储(Phone 存储)在 Android 方面仍被视为外部存储。 "External Storage" 可能指的是可移动存储,例如 SD 卡或 phone 的不可移动内部存储。

"Internal Storage" 指的是您应用的私有 space,不与任何人共享,包括用户。

因此,需要读取和写入外部存储的权限。在 Android M+ 上,需要实时许可。