首页 > 解决方案 > 自Android Q以来,如何将文件保存到具有范围存储的外部存储中,同时与android中的旧api级别兼容?

问题描述

借助 Android Q 附带的范围存储,我们只能使用 MediaStore api 或 SAF 在外部存储中创建或访问可共享文件。
但是,根据我的实验结果,当我尝试在 Android Q 以下的平台上使用 MediaStore api 插入 ContentValues 对象时,即使指定了相对路径和显示名称(如下面的代码),相对路径和显示名称也不起作用,这使得该 api 无法完全发挥作用.

contentResolver.insert(externalUri, ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "${prefix}_${datetimeString}.jpg")
    put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
})

另一方面,我认为我不应该使用 SAF,因为让用户每次都选择保存媒体文件的位置非常烦人。
另一种可能的方法是回退到 Environment.getexternalstoragedirectory,但即使我在我的代码中检查了 api 级别,IDE 也会报告此方法已被弃用。所以我认为这可能不被推荐。
有没有更好的方法来保存可共享的媒体文件(到具有指定名称的指定位置),同时与旧的 api 级别兼容?

标签: androidandroid-10.0

解决方案


推荐阅读