使用存储访问框架请求访问文件夹时,Intent.FLAG_GRANT_PREFIX_URI_PERMISSION 有什么用?

What is the use of Intent.FLAG_GRANT_PREFIX_URI_PERMISSION when requesting access to a folder using Storage access framework?

当请求通过 StorageAccessFramework 访问文件夹(文档树)时,我们使用此代码。我从 this repo and also seen in other questions on Whosebug like this and this.

得到了这段代码
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
    addFlags(
        Intent.FLAG_GRANT_READ_URI_PERMISSION
                or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
                or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
                or Intent.FLAG_GRANT_PREFIX_URI_PERMISSION
    )
}

startActivityForResult(intent, 101)

4 标志被添加到意图中,以便授予对文件夹的 read/write 权限,并且这些权限也得以保留(跨设备重启)。我的问题是,FLAG_GRANT_PREFIX_URI_PERMISSION 标志的目的是什么?

根据 documentation,这就是它的作用 -

When combined with FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION, the URI permission grant applies to any URI that is a prefix match against the original granted URI. (Without this flag, the URI must match exactly for access to be granted.) Another URI is considered a prefix match only when scheme, authority, and all path segments defined by the prefix are an exact match.

这给我留下的问题多于答案。比如什么是“前缀匹配”以及文档中最初授予的 URI 是什么?当应用程序请求新文件夹的权限时,这是一个有用的标志吗?

任何对此的澄清都会有所帮助。谢谢。

去掉 addFlags() 调用。 None 其中用于请求内容。主要是,它们用于授予他人权利。例如,您可以在 ACTION_VIEW Intent 中使用 FLAG_GRANT_READ_URI_PERMISSION and/or FLAG_GRANT_WRITE_URI_PERMISSION,因为您正在向另一个应用程序提供内容并且需要确保它具有权限阅读 and/or 写下内容。

FLAG_GRANT_PERSISTABLE_URI_PERMISSIONFLAG_GRANT_PREFIX_URI_PERMISSION用于进一步描述权限授予:

  • 能否请求系统保存权限?
  • 这些权限仅适用于关联的 Uri,还是适用于 Uri 和任何后代(即关联的 Uri 是前缀)