您可以通过操作Intent#ACTION_OPEN_DOCUMENT_TREE执行startActivityForResult with intent来使用SAF请求访问目录。 在onActivityResult中,你会得到一个intent,其中intent.getData()包含用户所选目录的uri,你可以把它存储在某个地方,然后用它来创建DocumentFile和DocumentFile#fromTreeUri,你最终可以用它来访问单个文件。 您可能希望通过执行以下操作保留目录的读/写权限,以便在设备重新启动后仍能访问该目录:
final int takeFlags = intent.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
// Check for the freshest data.
getContentResolver().takePersistableUriPermission(uri, takeFlags);
1条答案
按热度按时间qoefvg9y1#
您可以通过操作
Intent#ACTION_OPEN_DOCUMENT_TREE
执行startActivityForResult
with intent来使用SAF请求访问目录。在
onActivityResult
中,你会得到一个intent,其中intent.getData()
包含用户所选目录的uri,你可以把它存储在某个地方,然后用它来创建DocumentFile
和DocumentFile#fromTreeUri
,你最终可以用它来访问单个文件。您可能希望通过执行以下操作保留目录的读/写权限,以便在设备重新启动后仍能访问该目录:
但是,即使具有持久权限,您也可能会失去对目录的访问权限,因此请准备好再次重新请求访问权限。
最后一点:你可以使用
ActivityResultContracts.OpenDocumentTree
合约代替startActivityForResult
。