跳转至

存储配置

CameraXStoreConfig object类,存储配置全局生效。

函数 描述
configPhoto 配置拍照存储位置
configVideo 配置录制存储位置

一共有三种存储方式:file,MediaStore,saf访问框架。
若不进行配置,则默认存储到相册的CameraX文件夹下

  1. 调用CameraXStoreConfig.configPhoto()配置图片存储位置
  2. 调用CameraXStoreConfig.configVideo()配置录制存储位置,使用方式与配置图片没有区别,仅方法名称不同

推荐存储设置

  1. 对于android10以下,可以使用file方式存储。
  2. 对于android10以上,由于存储权限收紧
    • 对于存入app自身目录的,可以使用file
    • 对于存入相册、视频目录的,可以使用MediaStore
    • 对于其他目录的,可以使用saf框架

使用示例

视频的存储配置同拍照的存储配置相同,不过是把名称从configPhoto换成configVideo .可以参考app示例中的MainActivity

  • 使用file绝对路径存储
val targetDir = "fff" //目标文件夹
CameraXStoreConfig.configPhoto(
    IStore.FileStoreConfig(
        application.cacheDir.absolutePath,
        targetDir
    )
)
  • 使用MediaStore存储
CameraXStoreConfig.configPhoto(
    IStore.MediaStoreConfig(
        saveCollection = FileLocate.IMAGE.uri,
        mediaFolder = Environment.DIRECTORY_DCIM,
        targetFolder = relativePath
    )
)
  • 使用SAF框架存储到任意文件夹
StoreX.with(this).safHelper.requestOneFolder { it ->
    //使用SAF框架获取某一个文件夹的授权和uri,然后配置存储
    CameraXStoreConfig.configPhoto(
        IStore.SAFStoreConfig(it)
    )
}

拍摄完成,录制结束,获取文件地址

首先,我们在CameraExampleActivityCameraExampleActivity2中 都实现了CaptureResultListener接口来接收拍摄、录制完成的事件。

因此,在接口的方法参数中,可以获取到拍摄、录制完成后的文件地址。

/**
 * 拍完照片
 */
override fun onPhotoTaken(saveFileData: SaveFileData?) {
   super.onPhotoTaken(saveFileData)
   Log.d("CameraXFragment", "onPhotoTaken: $saveFileData")
   cameraXF.indicateTakePhoto()//拍照闪光
}

/**
 * 录完视频
 */
override fun onVideoRecorded(saveFileData: SaveFileData?) {
   super.onVideoRecorded(saveFileData)
   saveFileData?.let {
      Log.d(TAG, "onVideoRecorded: $it")
   }
}

SaveFileData类

  • 描述文件存储位置
  • 若使用了MediaStore,path为空,uri为content开头
  • 若使用文件,path不为空,uri为file开头
  • 若使用SAF,path为空,uri为content开头