如何使用Android存储访问框架处理ttf字体文件

ymzxtsji  于 2023-03-11  发布在  Android
关注(0)|答案(1)|浏览(144)

我正在写一个使用多种字体的日语词汇闪存卡程序。我的文件在assets目录中,但我想把它们移到外部存储器中。由于这些不是典型的媒体文件,我如何使用存储访问框架访问它们?我知道如何访问单个文件,但我想访问包含ttf字体文件的目录。

qoefvg9y

qoefvg9y1#

您可以通过操作Intent#ACTION_OPEN_DOCUMENT_TREE执行startActivityForResult with intent来使用SAF请求访问目录。
onActivityResult中,你会得到一个intent,其中intent.getData()包含用户所选目录的uri,你可以把它存储在某个地方,然后用它来创建DocumentFileDocumentFile#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);

但是,即使具有持久权限,您也可能会失去对目录的访问权限,因此请准备好再次重新请求访问权限。
最后一点:你可以使用ActivityResultContracts.OpenDocumentTree合约代替startActivityForResult

相关问题