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