Android:无法检索文件夹的Uri

问题描述 投票:0回答:1

我有一个应用程序,允许用户通过Android文件选择器Intent.ACTION_OPEN_DOCUMENT_TREE选择一个文件夹,然后在所选文件夹中创建一个ZIP文件,该文件最终将被共享。我可以通过OnActivityResult函数中的Uri uri = data.getData();检索选定的文件夹Uri。

这可行,选择了我的SD卡的Uri示例如下:content://com.android.externalstorage.documents/tree/15E6-0F1A%3A

现在,在共享出去之前,我需要将ZIP文件临时存储在应用程序缓存文件夹中。但是我很难进入缓存文件夹的Content Uri吗?

我认为我需要做的是以下内容:

File filePath = new File(this.getCacheDir(), "");
Uri uri = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", filePath);

然后将Uri发送到创建并共享ZIP文件的函数,但是用文件夹调用FileProvider.getUriForFile会导致应用程序崩溃。 java.lang.StringIndexOutOfBoundsException

一旦在缓存文件夹中创建一个文件并使用该文件句柄调用FileProvider.getUriForFile,我就会得到一个适当的Uri:

File filePath = new File(this.getCacheDir(), "");
File newFile = new File(filePath, "tmpFileName");
Uri uri = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", newFile);

所以看来FileProvider.getUriForFile无法处理文件夹?

我上下搜索,但是我发现的所有内容都是关于文件的,我需要一个文件夹Uri。我尝试了诸如DocumentFile和File之类的替代方法,但最终得到的只是“文件” Uris,而不是“内容” Uris。

因此,我的问题是,是否有人知道从文件夹获取内容Uri的方法,或更具体地说,如何获得this.getCacheDir()content Uri?

android uri
1个回答
0
投票

我可以通过Uri检索选定的文件夹Uri uri = data.getData();在OnActivityResult函数中。

不是文件夹。它是一个文档树。请特别注意,它不必表示文件系统上的目录。

现在,在共享出去之前,我需要将ZIP文件暂时存储在应用程序缓存文件夹中

File中创建指向所需目标文件的getCacheDir()对象,然后使用该File对象使用标准Java文件I / O复制或创建ZIP文件。请注意,此操作不需要Uri值。

所以看来FileProvider.getUriForFile无法处理文件夹?

正确。

并将Uri发送到创建并共享ZIP文件的功能上

您共享的Uri将指向ZIP文件。您不需要以某种方式指向UrigetCacheDir()。您可以使用普通文件I / O来创建ZIP文件,而无需涉及Uri

如何获取this.getCacheDir()的内容Uri?

Android中没有什么组件真正支持此概念,您不需要它。

© www.soinside.com 2019 - 2024. All rights reserved.