如何实现列出隐藏子目录中的所有文件(例如媒体),即文件夹名称以'.'开头,例如在 Flutter/Dart 中使用 SAF 后出现“(.media)”?
我使用ACTION_OPEN_DOCUMENT_TREE让用户选择一个文件夹[因此避免使用MANAGE_EXTERNAL_STORAGE]但无法查看,即读取文件夹隐藏子目录中的文件。
授予权限的文件夹是media:
存储/模拟/0/内部存储/Android/media/matrix/.new/
问题:
无法列出子文件夹中的所有文件.new
同时...
能够访问matrix子文件夹
内的文件(不是文件夹)此外,如果我将子文件夹“.new”重命名为new,我可以列出该文件夹中的所有文件
我正在使用 flutter/dart。对于共享存储权限,我使用了 Kotlin 自定义本机代码。
Kotlin 代码:
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler{ call: MethodCall, result: MethodChannel.Result -> run {
if (call.method.contentEquals("getSAFPermission")) {
if (VERSION.SDK_INT > 29) {
openDirectory(_initialPickerDirPath) //@String path
} else {
result.success(true)
}
}
}
}
}
private fun openDirectory(pickerInitialUri: String) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
putExtra(DocumentsContract.EXTRA_INITIAL_URI,DocumentsContract.buildDocumentUri(
"com.android.externalstorage.documents", pickerInitialUri)
}
startActivityForResult(intent, SAF_PERMISSION_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
if (requestCode == SAF_PERMISSION_CODE && resultCode == Activity.RESULT_OK) {
val contentResolver = applicationContext.contentResolver
val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION or
Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
contentResolver.takePersistableUriPermission(treeUri, takeFlags)
}
}
扑面| 飞镖代码:
_loadimage() async {
// path: '/storage/emulated/0/Android/media/neo/matrix/.new'
if (Directory(_neoDir.path).existsSync()) { // _neoDir: Directory
imageList += _neodDir
.listSync()
.map((item) => item.path)
.where((item) => item.endsWith(".jpg"))
.toList(growable: false); // imageList appear empty list
}
}
尝试过的方法:
1. 在原生 Kotlin 端,使用 CachingDocumentFile 获取子文档文件并迭代所有 DocumentFile 并将 Uri 列表存储在字符串中并将其发送回 Flutter 端。 dart 端渲染图像 File.fromUri() (Flutter)
参考->https://github.com/android/storage-samples/tree/main/ActionOpenDocumentTree
2.使用了这些人的解决方案。参考>https://github.com/lakscastro/shared-storage/issues/10#issuecomment-1025801272
我觉得我没有获得子文档文件的读取权限。
注意:- 截至 2022 年 1 月 31 日 没有 flutter 包有助于实现此功能。 尝试过给定的软件包 :
shared_storage,> https://pub.dev/packages/shared_storage
file_picker,> https://pub.dev/packages/file_picker
filesystem_picker,> https://pub.dev/packages/filesystem_picker
文件管理器(已停课)
任何帮助将不胜感激。