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
相关产品推荐
相关产品推荐

