在安卓Q(SDK >= 29)中,是否可以通过编程方式访问下载文件夹?

9
我想列出下载文件夹中所有.txt文件,然后允许用户选择一个并阅读其内容。我的minSdkVersion16,但因为我的Android版本是Q(29),所以遇到了这个问题。 我尝试过的: 显然,Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)可以解决SDK <= 29的问题。但是,我没有测试它,因为我首先想查看一种适用于Android Q的解决方案。 getExternalStoragePublicDirectory说:
当应用程序的目标版本为Build.VERSION_CODES.Q时,从此方法返回的路径不再直接对应用程序可访问。应用程序可以通过迁移到替代方案(如Context#getExternalFilesDir(String)MediaStoreIntent#ACTION_OPEN_DOCUMENT)来继续访问存储在共享/外部存储上的内容。
  • getExternalFilesDir 返回 /storage/emulated/0/Android/data/com.mypackage/files/Download。这个路径是没有用的,我期望它返回 /storage/emulated/0/Download,那里是下载文件的位置。

  • 我无法使用 MediaStore.Downloads 做某些事情。我查看了文档,它说“特别是,如果您的应用程序想要访问您的应用程序未创建的 MediaStore.Downloads 集合中的文件,则必须使用存储访问框架。”。因此,我认为它对我不起作用。

  • 在我的概念中,IntentStorage Access Framework 需要用户使用文件管理器浏览目录和文件,这不是我想要的。

简而言之:

在 Android Q(SDK >= 29)中,是否有可能以编程方式列出已下载的 .txt 文件?如果可以,如何实现?


在Android Q中,您可以。 - blackapps
我的应用程序中有一个共享功能,因此我正在使用FileProvider。这与您想要的访问无关。 - blackapps
1个回答

1
“在Android Q (SDK >= 29)中,是否可以通过编程列出已下载的 .txt 文件?” “不是其他应用程序创建的文件,这似乎是您的意图。” “最接近的方法是,如果您使用 ACTION_OPEN_DOCUMENT_TREE 并要求用户打开外部存储上的 Downloads/ 树...但是您无法在 Android R 上执行此操作(至少在 DP1 中无法)。”

1
我刚在你的博客上发现了这篇文章,它对存储主题非常阐明。 - Rafael Tavares
重新安装应用程序后,如何获取应用程序创建的文件?https://stackoverflow.com/questions/63593112/do-we-need-permission-to-get-all-files-that-is-self-created-by-the-app-after-the - jazzbpn
现在难道没有其他方法来完成这个任务吗?难道只能要求用户手动打开“下载”文件夹吗? - noloman
@noloman:如果你是在问是否可以独立访问“下载”文件夹中其他应用程序创建的文件,那么答案是否定的。 - CommonsWare
是的,确实这就是我想问的:我认为“下载”文件夹是一个外部目录,可以存储和打开文件,我认为我可以创建一个列出“下载”文件夹中所有文件的应用程序。 - noloman
1
@noloman:欢迎您请求“MANAGE_EXTERNAL_STORAGE”权限,但除非您有非常充分的理由,否则您的应用程序可能会被Play商店或其他应用程序分发渠道拒绝。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接