1

我需要能够在可移动 SDCard 上读取和写入数据,以便在卸载应用程序时不会将其删除。大量数据!

我有一个应用程序可以处理超过 50,000 个文件,10 GB(主要是图像和视频)。此数据最初使用 PC 中的 SD 适配器直接加载到 SDCard 上,然后通过 Android 设备上的 FTP 定期更新(少量文件)。(不同国家有一小部分用户。)

如果我使用 getExternalFilesDirs() 和 Environment.isExternalStorageRemovable(file) 将数据放在外部 SDCard 上,这一切都很好。示例路径:- /storage/1234-5678/Android/data.com.me.myapp/files/MyDataDirectory

但是,有时用户需要卸载并重新安装应用程序。在这种情况下,所有数据都会被破坏,如果将 SDCard 连接到 PC,则需要几个小时才能重建,如果必须通过 FTP 重建,则需要几天时间。

我可以将所有文件放入 SDCard 上的顶级目录并读取它们。该应用程序运行良好,卸载时不会删除文件。但是 FTP 更新失败,任何尝试写入 SDCard 的权限都被拒绝。

该应用程序使用 ActivityCompat.requestPermissions(activity, android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 101) 来获得用户的许可。

完成此操作后,ContextCompat.checkSelfPermission(act, permission.WRITE_EXTERNAL_STORAGE) 返回 PackageManager.PERMISSION_GRANTED。

我很乐意将我的数据写入公共目录的子目录,例如... File externalPublicDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);

但是:- Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 总是返回内部存储的路径。不是可移动的 SDCard。我的数据太大,无法接受。

这一切过去都可以在 KitKat 上完美运行,使用 SDCard 上的顶级目录,但渐进式安全控制阻止了简单的解决方案。我现在在运行该应用程序的所有设备上使用 Nougat。

设备相机似乎将照片放入 SDCard 上的公共目录中,因此可以完成。

我使用存储访问框架构建了一个解决方案,但速度非常慢。

任何人都可以建议一种使用文件系统写入 SDCard 上的公共目录的方法吗?

谢谢。

4

0 回答 0