【发布时间】:2020-05-30 21:55:06
【问题描述】:
我有一个应用程序,它允许用户通过 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?
【问题讨论】: