首页 > 解决方案 > 尽管创建了文件,但 Android Intent ACTION_CREATE_DOCUMENT 始终导致 URI==null

问题描述

我尝试使用以下意图将文件写入用户定义的位置以接收文件 uri

    val saveFile = Intent()
    saveFile.action = Intent.ACTION_CREATE_DOCUMENT
    saveFile.type = "application/pdf"
    saveFile.addCategory(Intent.CATEGORY_OPENABLE)
    saveFile.putExtra(Intent.EXTRA_TITLE, "123.pdf")

    activity.startActivityForResult(saveFile, 123)

然后读出结果

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

但即使意图每次都创建一个空文件,URI 也始终为空。授予文件系统访问权限,因为我从存储中读取文件没有任何问题。我错过了什么?

标签: androidandroid-intent

解决方案


您没有查看 的data参数onActivityResult()。相反,您正在查看Intent用于创建活动的对象。将您的第二个代码段替换为:

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)
}

推荐阅读