【问题标题】:Intent ACTION_GET_CONTENT returns uri even for deleted files意图 ACTION_GET_CONTENT 即使对于已删除的文件也会返回 uri
【发布时间】:2019-03-12 13:24:55
【问题描述】:

我正在尝试在 android 应用中读取 pdf 文件。

触发以下意图以获取 URI。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("application/pdf");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(intent, PDF_FILE_SELECTOR_INTENT_ID);

问题是,Downloads 文件夹还显示了我已删除的旧文件。 此外,当我选择这些文件时,onActivityResult() 中会返回一个有效的URI。当我从URI 创建File 并检查exists() 时,它会返回false,因为我已经从Downloads 文件夹中删除了该文件。

如何确保ACTION_GET_CONTENT 上显示的Downloads 文件夹仅显示当前存在的文件而不是已删除的文件?

谢谢。

【问题讨论】:

  • This is the intented behavior。 URI(s) 不会立即更新,因此,它们可能指向 null、不存在甚至不同类型的目标(音频、图像等)
  • 您不需要内容提供商为您执行此操作吗?
  • 您在哪个设备上进行测试。什么是android os版本?

标签: android file android-intent android-contentprovider


【解决方案1】:

代替

intent.setType("应用程序/pdf");在 putExtra 中使用 Intent.EXTRA_MIME_TYPES

在 Java 中:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
                "application/pdf", // .pdf
        });
        startActivityForResult(intent, REQUEST_CODE);

在 Kotlin 中

startActivityForResult(
        Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            addCategory(Intent.CATEGORY_OPENABLE)
            type = "*/*"
            putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
                    "application/pdf", // .pdf
            ))
        },
        REQUEST_CODE
      )

更新:在这种情况下,实际下载文件夹和“下载”文件夹不同。

Download 是您实际下载的文件 下载是一个历史文件夹,其行为类似于快捷方式,当手动删除指向的实际文件时,它不会自动清除。这很可能是一种预期行为。

在您的情况下,您需要隐藏下载文件夹(您仍然可以使用下载)。使用这行代码会默认显示“Internal storage”:

intent.putExtra("android.content.extra.SHOW_ADVANCED", true);

【讨论】:

  • 对我来说,使用代码,下载中已删除的旧文件夹仍然显示。如何刷新?
【解决方案2】:

按照此处的建议,将 addCategory(Intent.CATEGORY_OPENABLE) 呼叫您的 Intent:https://developer.android.com/reference/android/content/Intent#ACTION_GET_CONTENT

【讨论】:

  • 使用 CATEGORY_OPENABLE 时仍然显示很多以前删除的文件...
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
相关资源
最近更新 更多