通过 android 版本下载 PDF 的兼容性

Compatibility through android versions to download a PDF

在接下来的几个月里,如果你想发布,强制性的 Android 目标 SDK 是 30,所以我正在升级我用 Java 编写的 Android 项目,但我在保存 PDF 时遇到问题来自 url。 我保存 PDF 的旧方法在于使用:

SystemUtils.saveFile(pdfAsBytes, path.toString(), fileName + "." + this.fileType);

为了在我使用的设备没有 SD 卡的情况下也能正常工作

android:requestLegacyExternalStorage="true"

但是现在,如果我被迫使用 SKD=30,android:requestLegacyExternalStorage 设置为 false,那么,如何调整应用程序以管理从 minSdkVersion 19 到 targetSdkVersion 30 的 PDF 下载,包括设备没有SD卡??我设法在版本 >= Q 时如何下载 PDF 但如何处理 android 6,7,8,9... 对于我的应用程序,设置用户权限 android.permission.MANAGE_EXTERNAL_STORAGE 的方法无效并被拒绝,因为不是核心应用程序。

对于许多应用来说,理想的解决方案是使用 Context 上的方法来存储内容:

  • 对于用户不需要独立访问的内容,使用 getFilesDir()getCacheDir()
  • 之类的内容
  • 对于用户可能需要通过 USB 数据线访问的内容,请使用 getExternalFilesDir()getExternalCacheDir()
  • 之类的内容
  • 对于用户可能需要在可移动存储上的内容,请使用 getExternalFilesDirs()(注意复数)

您对这些目录具有完整的文件系统访问权限,无需为它们请求任何运行时权限。

如果您希望能够写入共享 public 位置,您的选择是:

  • 对于媒体,使用 MediaStore
  • 使用存储访问框架,例如 ACTION_CREATE_DOCUMENT,允许用户决定在用户​​设备(或用户的云存储)上放置内容的位置