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

Android Intent ACTION_CREATE_DOCUMENT创建文件后URI始终为null求助

问题分析与解决方案

嘿,这问题很典型!你在onActivityResult回调里犯了一个容易忽略的小错误——误用了当前Activity的intent来获取返回的URI,而不是方法参数里传进来的data对象,这就是URI始终为null的核心原因。

问题根源

在onActivityResult方法中,第三个参数data才是包含用户创建文件结果的Intent对象,而你代码里写的intent是当前Activity自身的Intent,和这次文件创建操作的返回结果完全无关。

修正后的代码

把回调里的intent.data改成data?.data就可以正常获取URI了:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == 123 && resultCode == RESULT_OK && data != null) {
        Log.d(TAG, "URI: ${data.data}")
    } else super.onActivityResult(requestCode, resultCode, data)
}

额外适配提示

如果你的应用目标API是30及以上,官方已经弃用了startActivityForResult,推荐使用更简洁的ActivityResultContracts.CreateDocument来实现相同功能,示例代码如下:

private val createDocumentLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("application/pdf")) { uri ->
    uri?.let {
        Log.d(TAG, "URI: $it")
        // 在这里处理获取到的文件URI
    }
}

// 调用创建文件的逻辑时
createDocumentLauncher.launch("123.pdf")

这种方式可以避免回调参数混淆的问题,代码结构也更清晰。

内容的提问来源于stack exchange,提问作者GenError

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:52:44