当前位置: 首页 > 知识库问答 >
问题:

Android Intent ACTION_CREATE_DOCUMENT总是导致URI==NULL,尽管创建了文件

祝高阳
2023-03-14

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

共有1个答案

狄冥夜
2023-03-14

您查看的不是OnActivityResult()data参数。 相反,您正在查看用于创建activity的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)
}
 类似资料:
  • 我正在开发一个通过BLE获取数据并将其保存在文本文件中的应用程序。 我使用的是SDKVersion29。

  • 我正在GKE上安装官方头盔图表。 我正在启用,因此应该应用相应的模板并创建资源。 根据官方GKE留档: 创建入口时,GKE入口控制器根据入口和相关服务中的信息创建并配置HTTP(S)负载平衡器。此外,负载平衡器有一个稳定的IP地址,您可以将其与域名关联。 然而,我的情况并非如此;入口没有与之关联的外部IP: 以下是实际的入口资源: 那是为什么呢? 在kubernetes中尝试了nginx和gce。

  • Oauth2,如下所示: 在访问回调url时,我得到以下异常: org.springframework.beans.factory.BeanCreationException:创建名为“ScopedTarget.oauth2ClientContext”的bean时出错:当前线程的作用域“session”不活动;如果您打算从单个对象引用这个bean,请考虑为它定义一个限定作用域的代理 完全异常跟踪:

  • 我在插入模板时遇到问题。当我运行tde时。templateInsert作为响应返回无效的权限,但我在数据库设置中启用了三重索引,并为用户添加了权限(添加了tde admin和tde view)。 我将逐步遵循本教程:https://developer.marklogic.com/learn/template-driven-extraction/ 这是整个错误消息: [javascript]SEC-

  • 使用Kubernetes 1.12.6-gke。7或更高版本可以创建ManagedCertificate,然后从向Internet公开服务的入口资源引用该证书。 运行kubectl描述管理证书证书名称首先指示证书处于配置状态,但最终转到FailedNotViable。 尽管使用静态IP和DNS可以很好地解析上述服务的http版本,但所有ManagedCertificate最终都会处于“状态:Fai

  • 我对Liquibase(最新版本3.2.2)有一个奇怪的问题。 它没有检测到DATABASECHANGELOG已经存在,因此尝试创建它但失败。 如您所见,创建了表和元数据表: 但当我再次运行时,不是没有任何操作,而是得到一个错误:

  • 问题内容: 我的长字符串不适合屏幕的宽度。例如。 为了使阅读更容易,我想到了用这种方式编写它- 但是,我意识到第二种方法使用字符串连接,并会在内存中创建5个新字符串,这可能会导致性能下降。是这样吗 还是编译器足够聪明,以至于我只需要一个字符串就可以了?我如何避免这样做? 问题答案: 我意识到第二种方法使用字符串连接,并将在内存中创建5个新字符串,这可能会导致性能下降。 不,不会。由于这些是字符串文