基本上,我的问题与this有点类似,我已经使用了解决方法。问题是,它只有在文件来自内部存储器时才有效,这就是它的原因:
在这部分代码中(在我提到的问题的解决方案中):
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
// TODO handle non-primary volumes
}
没有以下 else 语句。我已经搜索了访问非主要卷的方法,但我无法找到答案。
答案 0 :(得分:0)
该问题和答案中提供的代码糟糕。 Uri
无需指向文件,更不用说您可以访问的文件,更不用说可以从Uri
本身派生其路径的文件。具有Uri
方案的content
是一个不透明的句柄,仅此而已。
使用ContentResolver
和openInputStream()
(或openOutputStream()
)获取Uri
标识的内容的流。