android - 自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 级别兼容?
解决方案
推荐阅读
- docker - Docker:无法安装 openssh-server
- python-3.x - 日期之间的比较以 -1 开头
- java - 无法建立 Hibernate SessionFactory;org.hibernate.MappingException:无法确定类型
- httpclient - Keycloak - 如何为 keycloak 库中使用的 http 客户端设置超时
- c++ - _getch() 前几次没有检测到击键
- mysql - 时序数据类型的 SQL 数据库结构
- javascript - javascript和HTML如何找到鼠标的位置?
- django - 将 Django ForeignKey 设置为多个模型
- java - 布尔值始终返回 true
- ruby - 使用基于“命名空间”的应用程序时如何修复“未初始化的常量”