You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:06:02