When requesting access to a folder (document-tree) via StorageAccessFramework, we use this code. I got this code from this repo and also seen in other questions on StackOverflow 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 flags are added to the intent so that read/write permissions to the folder are given and also so that those permissions are persisted (across device restarts). My question is, what is the purpose of the FLAG_GRANT_PREFIX_URI_PERMISSION
flag?
As per the documentation, this is what it does -
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.
This leaves me with more questions than answers. Like what is a "prefix match" and what originally granted URI is the documentation referring to? Is this a flag which is useful when app requests permissions for a new folder?
Any clarification on this will be helpful. Thanks.