如何创建一个文件夹并将我的应用程序生成的所有文件存储在android q

时间:2019-10-20 09:37:16

标签: java android android-10.0

在我的应用程序中,我正在保存不同类型的图像,视频,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. 从此文件夹中读取文件。

1 个答案:

答案 0 :(得分:0)

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