【问题标题】:How to create a folder and store all files generated by my app in that folder in android q如何在android q中创建一个文件夹并将我的应用程序生成的所有文件存储在该文件夹中
【发布时间】:2019-10-20 09:37:16
【问题描述】:

在我的应用程序中,我正在保存不同类型的图像、视频、pdf 等文件。如果目录尚不存在,我将创建一个目录,并将我的应用程序生成的文件保存在该文件夹中,以便用户可以轻松找到我的应用程序使用和创建的文件。但在 Android 10 中,我无法在外部存储中检查和创建目录。

我知道我可以在清单中添加android:requestLegacyExternalStorage="true" 以继续使用旧功能,但这不是永久解决方案。另外,我不想使用getExternalFilesDir(),因为如果用户卸载我的应用程序,此方法创建的这个文件夹将被删除,我希望应用程序保存的文件保留在他的设备中,以便可以使用这些文件再次。

这是我目前用来检查和创建我的应用程序目录并将文件“myFile”存储在该目录中的代码。

File sd =Environment.getExternalStorageDirectory();
File directory = new File(sd.getAbsolutePath() + "/" + getResources().getString(R.string.app_name));

//create directory if not exist
if (!directory.isDirectory()) {
    directory.mkdirs();
}
File file = new File(directory, myFile);

如何在 Android 10 中实现相同的结果?我真正想要的是:

  1. 检查是否存在以我的应用名称命名的目录。如果目录不存在,则在设备外部存储中创建目录。
  2. 将我的应用程序生成的所有文件保存在此目录中。
  3. 即使用户卸载应用程序,该文件夹也不应该被删除。
  4. 从此文件夹中读取文件。

【问题讨论】:

  • 如果您使用 getFilesDIr()、getExternalFilesDir() 或 getExternalFIlesDirs(),您的应用可以以经典方式在其中创建任意数量的文件夹。
  • 如果您不想改变现代,请使用 ACTION_OPEN_DOCUMENT_TREE 让用户选择内部存储器或微型 SD 卡。一旦有了这样的内容树方案,您就可以根据需要创建任意数量的文件夹
  • 使用 getExternalFilesDir() 或 getFilesDir() 生成的文件夹将在应用卸载时被删除。我不想删除文件夹。
  • 是的,正如您在我的第二条评论中看到的那样,我已经意识到这一点。请对我的第二条评论做出反应。
  • 我还没有尝试过你的第二个建议。一旦我这样做了,我会告诉你的。

标签: java android android-10.0


【解决方案1】:

在 Android Q 中,对于私有文件夹之外的应用,默认情况下禁用直接文件访问。您可以使用StorageManager 类的方法getPrimaryStorageVolume().createOpenDocumentTreeIntent() 来请求访问外部主卷。在这种情况下,您需要用户同意并且无论如何您将无法直接使用 File api,但是使用 DocumentFile 类您有一个非常相似的接口,因此这是更接近旧行为的解决方案。如果您需要在前台和后台执行操作,则它可以工作,即没有用户交互,但第一次交互请求权限除外。 我链接了Flipper 库,它有助于管理文件,就像在旧版本的 android 中一样。

【讨论】:

  • You can use the method getPrimaryStorageVolume().createOpenDocumentTreeIntent() of class StorageManager to ask for access to the extenal primary volume.。即使用户允许特定目录,您也会得到一个静默的取消结果代码。可悲的是没有用。
  • @blackapps 我在我的应用程序中使用该库(基于该方法),它按预期工作。
猜你喜欢
  • 2019-06-07
  • 1970-01-01
  • 2011-02-27
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2019-03-16
  • 1970-01-01
相关资源
最近更新 更多