AndroidSAF-ACTION_OPEN_DOCUMENT_TREE无法从子目录创建和列出文件。
创始人
2024-10-10 00:31:53
0

在使用ACTION_OPEN_DOCUMENT_TREE打开时,需要调用许可请求并获得授权后,才能使用该目录下的所有文件和文件夹。在选择目录时,需要保证选择的目录是存储卡的顶级目录,而不是子目录。在获取树权限后,需要使用Uri获取该目录的访问权限,并在代码中进行访问控制。

以下是示例代码:

fun requestStoragePermission(activity: Activity, requestCode: Int) {
   val storagePermission = Manifest.permission.WRITE_EXTERNAL_STORAGE
   if (ContextCompat.checkSelfPermission(activity, storagePermission) != PackageManager.PERMISSION_GRANTED) {
       ActivityCompat.requestPermissions(activity, arrayOf(storagePermission), requestCode)
   }
}

val REQUEST_CODE_OPEN_DOCUMENT_TREE = 1
val EXPORT_FOLDER_NAME = "Exported Files"
 
fun createFile() {
   val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
       flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
   }
   startActivityForResult(intent, REQUEST_CODE_OPEN_DOCUMENT_TREE)
}
 
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
   if (requestCode == REQUEST_CODE_OPEN_DOCUMENT_TREE && resultCode == RESULT_OK) {
       data?.data?.also { uri ->
           val folderName = EXPORT_FOLDER_NAME
           val directory = DocumentsContract.getTreeDocumentId(uri)
           val documentUri = DocumentsContract.buildDocumentUriUsingTree(uri, directory)
           val folderUri = DocumentsContract.createDocument(contentResolver, documentUri, DocumentsContract.Document.MIME_TYPE_DIR, folderName)
           val fileUri = DocumentsContract.createDocument(contentResolver, folderUri, "text/plain", "example.txt")
           contentResolver.openFileDescriptor(fileUri, "w")?.use {
               FileOutputStream(it.fileDescriptor).use { output ->
                   val text = "Hello world!"
                   output.write(text.toByteArray())
                   output.flush()
               }
           }
           revokeUriPermission(fileUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
       }
   }
}

相关内容

热门资讯

wepoke有辅助挂(透视)W... wepoke有辅助挂(透视)We辅poker助(详细辅助揭秘教程)原来是真的有挂(专业辅助德之星)1...
wepoke是真的有挂(透视)... wepoke是真的有挂(透视)wepoke支持安卓吗(详细辅助AI教程)其实有挂(攻略ai代打)1、...
wepoke插件(透视)wep... wepoke插件(透视)wepower软件(详细辅助细节揭秘)确实有挂(玩家有辅助挂)小薇(透视辅助...
wepoke智能ai(透视)w... wepoke智能ai(透视)wopoker系统机制(详细辅助系统教程)原来真的是有挂(详细一定有挂)...
wepoke辅助挂(透视)we... wepoke辅助挂(透视)wepoke透明挂辅助(详细辅助扑克教程)竟然存在有挂(专业辅助器);该软...
wepoke黑科技(透视)we... wepoke黑科技(透视)wepoke辅助软件下载链接(详细辅助2025新版教程)切实是有挂(普及软...
wepoke辅助挂(透视)we... wepoke辅助挂(透视)wepoke辅助(详细辅助必赢方法)果然有挂(专业辅助技巧)1、wepok...
wepoke辅助插件(透视)w... wepoke辅助插件(透视)wepoke软件透明功能实现方法(详细辅助解说技巧)本来存在有挂(大神透...
wepoke有没有挂(透视)w... wepoke有没有挂(透视)wepoke有挂吗(详细辅助存在挂教程)一贯有挂(攻略透明挂)暗藏猫腻,...
wepoke真的有挂(透视)w... wepoke真的有挂(透视)wopoker辅助软件(详细辅助系统教程)竟然真的有挂(普及透明挂);1...