【问题标题】:Android Intent ACTION_CREATE_DOCUMENT always leads to URI==null despite file being created尽管创建了文件,但 Android Intent ACTION_CREATE_DOCUMENT 始终导致 URI==null
【发布时间】:2020-06-19 14:10:13
【问题描述】:

我尝试使用以下意图将文件写入用户定义的位置以接收文件 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 始终为空,即使意图每次都创建一个空文件。授予文件系统访问权限,因为我从存储中读取文件没有任何问题。我错过了什么?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

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

    【讨论】:

    • @GenError:在你的辩护中,这部分是 Kotlin 的错。 “将吸气剂转化为属性”功能很巧妙,但它可能会导致混乱。在这种情况下,如果您一直使用getIntent() 而不是intent,问题的根源会更加明显。
    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多