通过 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
,允许用户决定在用户设备(或用户的云存储)上放置内容的位置
在接下来的几个月里,如果你想发布,强制性的 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
,允许用户决定在用户设备(或用户的云存储)上放置内容的位置