当前位置: 首页 > 知识库问答 >
问题:

Android Q中不推荐使用getExternalStoragePublicDirectory

顾嘉良
2023-03-14

由于Android Q中不推荐使用getExternalStoragePublicDirectory,建议使用其他方法。那么如何指定要将相机应用程序生成的照片存储到DCIM文件夹或DCIM中的自定义子文件夹?

文档中指出,以下3个选项是新的首选选项:

  1. 上下文#GetExternalFilesDir(字符串)
  2. 纵隔
  3. 意图#action_open_document

选项3也不是一个选择,因为它需要用户通过SAF文件资源管理器选择位置。

我们剩下的是方案2,纵隔;但是没有关于如何在Android Q中使用它来替代getExternalStoragePublicDirectory的文档。

共有1个答案

须巴英
2023-03-14

根据文档,对relative_path使用dcim/...,其中...是您的自定义子目录。所以,你会得到这样的结果:

      val resolver = context.contentResolver
      val contentValues = ContentValues().apply {
        put(MediaStore.MediaColumns.DISPLAY_NAME, "CuteKitten001")
        put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
        put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/PerracoLabs")
      }

      val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)

      resolver.openOutputStream(uri).use {
        // TODO something with the stream
      }

注意,由于relative_path对于API级别29是新的,您需要在较新的设备上使用这种方法,而在较旧的设备上使用getExternalStoragePublicDirectory()

 类似资料:
  • 我收到此错误,并且尝试将更改为仍然收到不同的错误。

  • 问题内容: 我收到此警告,但是该程序仍然可以正常运行。 MySQL代码向我显示了一条PHP消息: 不推荐使用:mysql_connect():不推荐使用mysql扩展,以后将被删除:在第2行的C:\ xampp \ htdocs \ task \ media \ new \ connect.inc.php中使用mysqli或PDO代替 我的页面是 这是什么意思,我该如何消除该消息? 问题答案: 有

  • 问题内容: 我正在尝试使用和进行单元测试。 当我不包含注释时,测试将失败。但 不推荐使用MockitoJUnitRunner类型 我正在使用Mockito 2.6.9。我应该怎么做? 问题答案: 现在确实已弃用,应该改为使用。如您所见,仅软件包名称已更改,该类的简单名称仍为 。 摘录自javadoc : 移至,该课程将在Mockito 3中删除

  • 新的侦听器(又名OnCameraMoveListener())方法onCameraMove()没有CameraPosition CameraPosition输入变量,所以我很迷惑:有没有方法回收我的旧代码? 这里有一些参考资料。

  • 我收到这个警告,但程序仍然正常运行。 MySQL代码用PHP向我显示了一条消息: 不推荐使用:mysql_connect():不推荐使用mysql扩展,以后将删除该扩展:在C:\xampp\htdocs\task\media\new\connect.inc.php第2行使用mysqli或PDO 我的页是 这意味着什么,我如何消除消息?

  • 问题内容: 当我使用以下用户定义的异常时,我收到一条警告:Python 2.6中不推荐使用BaseException.message: 这是警告: 这怎么了 为了摆脱过时警告,我必须更改什么? 问题答案: 解决方案-几乎不需要编码 只是继承您的异常类,并将消息作为第一个参数传递给构造函数 例: 您可以使用或(不太优雅)来访问自定义消息。 背景 在较新的Python版本(从2.6开始)中,我们应该从