我正在尝试在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
文件夹还显示了我已删除的旧文件。
另外,当我选择这些文件时,将在uri
中返回有效的onActivityResult()
。当我从File
创建uri
并检查exists()
时,它返回false
,这很有意义,因为我已经从Downloads
文件夹中删除了文件。
如何确保Downloads
上显示的ACTION_GET_CONTENT
文件夹仅显示当前存在的文件,而不显示已删除的文件?
谢谢。
答案 0 :(得分:3)
代替
<块引用>intent.setType("application/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
)
更新:在这种情况下,实际下载文件夹和“下载”文件夹不同。
下载用于您实际下载的文件 下载是一个历史文件夹,就像一个快捷方式,当手动删除指向的实际文件时,它不会自动清除。这很可能是一种预期行为。
在您的情况下,您需要隐藏下载文件夹(您仍然可以使用下载)。使用这行代码将默认显示“内部存储”:
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
答案 1 :(得分:0)
按照此处的建议调用 addCategory(Intent.CATEGORY_OPENABLE)
到您的 Intent:https://developer.android.com/reference/android/content/Intent#ACTION_GET_CONTENT