我试图在外部ResponseBody
上保存SdCard
,但我收到以下错误:
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:939)
at my.app.package.utils.DocumentFileUtils.saveDocument(DocumentFileUtils.java:120)
这是失败的方法:
public static String saveDocument(String filename, ResponseBody responseBody) {
Logs.document("Saving file " + filename);
File file = createFile(filename);
Logs.document("Full path: " + file.getAbsolutePath());
if (!file.exists()) {
try {
file.getParentFile()
.mkdirs();
file.createNewFile(); //Exception happens here
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
try {
BufferedSource source = responseBody.source();
BufferedSink sink = Okio.buffer(Okio.sink(file));
sink.writeAll(source);
sink.close();
responseBody.close();
return file.getAbsolutePath();
} catch (Exception e) {
responseBody.close();
e.printStackTrace();
if (file.exists()) file.delete();
return null;
}
}
使用createFile创建的文件具有以下路径:
/mnt/media_rw/0123-4567/Android/data/my.app.package/files/document_files/file_name.ext
我在WRITE_EXTERNAL_STORAGE
和运行时权限中都拥有Manifest
权限,授予权限(我也可以从应用信息中检查)。< / p>
我错过了什么吗?