使用ActivityResultContracts.CreateDocument()时如何添加intent类型
解决方案
ActivityResultContracts.CreateDocument 构造函数本身支持直接传入MIME类型参数,你只需要在实例化合约时指定audio/*即可,无需手动配置Intent:
// 实例化CreateDocument合约时直接传入MIME类型参数 val createFileIntent = registerForActivityResult(ActivityResultContracts.CreateDocument("audio/*")) { uri -> // 在此处处理返回的uri逻辑 } // 使用时仅需传入文件名即可 createFileIntent.launch(fileName)
如果你的MIME类型需要在运行时动态修改,不想在注册时固定,也可以自定义合约重写createIntent方法实现灵活配置:
// 自定义支持动态传入MIME类型的CreateDocument合约 class CustomCreateDocument : ActivityResultContracts.CreateDocument() { override fun createIntent(context: Context, input: Pair<String, String>): Intent { // input参数格式为 Pair<文件名, MIME类型> val intent = super.createIntent(context, input.first) intent.type = input.second return intent } } // 注册时使用自定义合约 val createFileIntent = registerForActivityResult(CustomCreateDocument()) { uri -> // 在此处处理返回的uri逻辑 } // 使用时传入 文件名+MIME类型 的Pair createFileIntent.launch(Pair(fileName, "audio/*"))
注意事项
需要确保你项目依赖的AndroidX Activity版本不低于1.2.0、Fragment版本不低于1.3.0,这两个版本开始才支持CreateDocument构造方法传入MIME类型参数。
内容的提问来源于stack exchange,提问作者Ahmet B.
相关产品推荐
相关产品推荐

