有没有更好、更干净的方式在 Flutter 中使用 SAF(存储访问框架)?

问题描述 投票:0回答:1
实际上我想在Flutter for android中创建一个文件下载器,可以同时下载文件。为此,我想要访问存储系统或用户选择的磁盘上的任何文件夹。我尝试在 flutter 中使用

Filepicker

 包,但它在某些设备中有效,但在某些设备中无效(也可以在清单文件中使用包括存储管理的权限)。

我尝试使用

kotlin

 创建一个简单的平台本机代码,并使用 
获取用户选择的路径

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE_FOLDER_PICKER && resultCode == RESULT_OK) { data?.data?.let { uri -> contentResolver.takePersistableUriPermission( uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION ) // Convert the URI to a file path val folderPath = getAbsolutePathFromUri(uri) ?: "" // Send the folder path back to the Flutter side pendingResult?.success(folderPath) pendingResult = null } } else { // If the user cancels the folder picker, send an empty string back pendingResult?.success("") pendingResult = null } }
但它以“树/下载”形式返回值,这也不起作用,我也将此路径格式化为

/storage/emulated/0/Downloads

,它仍然会引起权限被拒绝错误。

所以,我想知道你们中是否有人知道如何以更好的方式访问存储系统,这种方式可以在大多数 Android 设备上工作并且非常有预测性。 (不仅仅是随机的,有时有效,有时无效。)

java android flutter kotlin
1个回答
0
投票
更新文件选择器很好,但如果现在可以使用,请尝试使用 flutter_file_dialog 或 ext_storage 进行文件夹访问。

© www.soinside.com 2019 - 2024. All rights reserved.