1

代码:

DocumentFile dfNew = dfDirectory.createFile("video/mp4", "foo.mp4");
//dfNew.getParentFile() is NOT null.  
DocumentFile dfNewCopy = DocumentFile.fromSingleUri(activity, dfNew.getUri());
//dfNewCopy.getParentFile() IS null. Otherwise, dfNewCopy works fine

为什么从 DocumentFile 的 Uri 创建的 DocumentFile 在这方面与原始文件不同?

4

1 回答 1

4

存储访问框架是在 API 16 的日子里为一个非常狭窄的用例(实现第一个官方 Android 文件选择器)而设计的。DocumentsProvider 当时缺乏很多有用的功能。在以下版本的平台中添加了更多方法。

API 21 中添加了检查一个 Uri 是否是另一个 Uri (isChildDocument) 的父级所需的方法。

API 26 (Oreo) 中增加了获取 Uri 父级的方法(findDocumentPath)。

DocumentFile 不能在旧平台上返回父 Uri,因为系统本身不在那里提供它。

于 2018-02-22T04:43:06.850 回答