更新记录

1.0.0(2026-05-27)

  • 支持 uni-app x 标准模式 UTS 原生相机组件。
    • 支持 Android / iOS / Harmony Next 三端原生预览、拍照、录像。
    • 支持拍照和录像保存到系统相册或应用沙箱,并返回照片/视频路径。
    • 支持前后摄像头切换、默认摄像头配置、自动对焦、双指缩放。
    • 支持闪光灯关闭、开启、自动三种模式,覆盖拍照和录像。
    • 支持拍照、录像、错误、相机就绪等事件回调,便于业务接入。
    • 可高度自定义界面

平台兼容性

uni-app x(4.86)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
- - 5.0 1.0.0 12 1.0.0 13 1.0.0 -

luanqing-camera-uts

这是我们最新开发推出的一个 标准模式 的 UTS 组件插件,无需打自定义基座,android/ios/鸿蒙三端通用,支持 uni-app x。小程序视频动态水印我们也有方案,如有需要可以定制开发。

在自定义相机这块我们还有多个历史版本 Android+IOS的增强版插件 Android+IOS的基础版插件 Android低版本系统专用 UTS兼容版插件

组件用途:

  • 提供原生相机会话启动能力
  • 拍照并通过回调返回照片路径
  • 开始/结束录像,并在结束时通过回调返回视频路径
  • 支持在预览画面上双指缩放

说明

  • 该组件是一个标准模式的 native-view helper 组件,内部直接调用各平台原生相机能力,不依赖 uni.chooseImage / uni.chooseVideo / uni.chooseMedia
  • Android 使用 Camera2 + ImageReader + MediaRecorder
  • iOS 使用 AVFoundation
  • Harmony Next 使用 CameraKit + AVRecorder + photoAccessHelper + FileKit
  • Android、iOS、Harmony Next 均支持预览画面双指缩放;缩放比例会作用于预览、拍照和录像。
  • Android、iOS、Harmony Next 均支持 flashMode 闪光灯配置,可选 off / on / auto,会作用于拍照和录像。
  • isSaveToAlbum=true 时,拍照/录像保存到系统相册/媒体库;Android 返回 content:// URI,iOS 返回 ph:// PhotoKit 本地标识,Harmony Next 返回媒体库 URI。
  • isSaveToAlbum=false 时,拍照/录像只保存到应用沙箱并返回沙箱绝对路径。
  • 当前文档对应的是三端原生代码状态;是否在你的设备组合上完全可用,仍建议做一次真机编译与联调确认。

平台支持

平台 支持情况
uni-app x Android 已实现原生 Camera2
uni-app x iOS 已实现原生 AVFoundation
uni-app x Harmony Next 已实现原生 CameraKit / AVRecorder
传统 uni-app 不支持

建议使用版本:

  • HBuilderX >= 4.61
  • uni-app x >= 4.61

组件属性

属性名 类型 默认值 说明
camera String 空字符串 当前摄像头方向,可选 front / back。传入后可动态切换;为空时使用 defaultCamera
defaultCamera String back 默认摄像头方向,可选 front / back
autoPreview Boolean true 组件初始化后是否自动打开预览
isSaveToAlbum Boolean true 是否保存到系统相册/媒体库。true:保存到系统相册/媒体库并返回平台资源 URI/标识;false:仅保存到应用沙箱并返回沙箱路径
flashMode String off 闪光灯模式,可选 off / on / auto。拍照时控制闪光灯;录像时 on 使用持续补光,auto 使用平台支持的自动模式,不支持时降级为关闭

组件事件

事件名 说明 回调数据
ready 原生相机会话已就绪 {}
photoTaken 拍照成功 { path, message }
videoStart 录像已开始 {}
videoStop 录像已结束 { path, message }
recordFail 录像流程失败 { action, message }
error 原生能力报错 { message }{ action, message }

path 的含义取决于 isSaveToAlbum:保存系统相册/媒体库时是平台资源 URI 或标识;保存沙箱时是本地绝对路径。

组件方法

startPreview

启动原生预览。

this.$refs.cameraHelper.startPreview()

stopPreview

停止原生预览。

this.$refs.cameraHelper.stopPreview()

takePhoto

拍照并返回照片路径。

this.$refs.cameraHelper.takePhoto(
  (path) => {
    console.log("照片路径:", path)
  },
  (error) => {
    console.error("拍照失败:", error)
  }
)

startRecord

开始录像。成功回调表示录像真正开始。

this.$refs.cameraHelper.startRecord(
  () => {
    console.log("录像已开始")
  },
  (error) => {
    console.error("开始录像失败:", error)
  }
)

stopRecord

结束录像并返回视频路径。

this.$refs.cameraHelper.stopRecord(
  (path) => {
    console.log("视频路径:", path)
  },
  (error) => {
    console.error("结束录像失败:", error)
  }
)

switchCamera

切换前后摄像头。

this.$refs.cameraHelper.switchCamera()

setCameraFacing

切换到指定摄像头方向。可选值为 front / back,传入其它值会按 back 处理。

this.$refs.cameraHelper.setCameraFacing("front")

使用示例

<template>
  <view class="page">
    <luanqing-camera-uts
      ref="cameraHelper"
      defaultCamera="back"
      :camera="cameraFacing"
      :autoPreview="true"
      :isSaveToAlbum="true"
      flashMode="auto"
      @ready="onReady"
      @photoTaken="onPhotoTaken"
      @videoStart="onVideoStart"
      @videoStop="onVideoStop"
      @recordFail="onRecordFail"
      @error="onCameraError"
    />

    <button @click="startPreview">启动预览</button>
    <button @click="takePhoto">拍照</button>
    <button @click="startRecord">开始录像</button>
    <button @click="stopRecord">结束录像</button>
    <button @click="switchCamera">切换摄像头</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      cameraFacing: "back"
    }
  },
  methods: {
    startPreview() {
      this.$refs.cameraHelper.startPreview()
    },
    takePhoto() {
      this.$refs.cameraHelper.takePhoto((path) => {
        console.log("photo path:", path)
      })
    },
    startRecord() {
      this.$refs.cameraHelper.startRecord(() => {
        console.log("record started")
      })
    },
    stopRecord() {
      this.$refs.cameraHelper.stopRecord((path) => {
        console.log("video path:", path)
      })
    },
    switchCamera() {
      const next = this.cameraFacing == "back" ? "front" : "back"
      this.$refs.cameraHelper.setCameraFacing(next)
      this.cameraFacing = next
    },
    onReady(e) {
      console.log("camera ready:", e.detail)
    },
    onPhotoTaken(e) {
      console.log("photo payload:", e.detail)
    },
    onVideoStart(e) {
      console.log("video start:", e.detail)
    },
    onVideoStop(e) {
      console.log("video stop:", e.detail)
    },
    onRecordFail(e) {
      console.error("record fail:", e.detail)
    },
    onCameraError(e) {
      console.error("camera error:", e.detail)
    }
  }
}
</script>

权限说明

项目侧需要确保具备以下权限描述或权限声明:

  • Android: CAMERARECORD_AUDIOisSaveToAlbum=true 且需兼容 Android 9 及以下保存到系统相册时,还需要 WRITE_EXTERNAL_STORAGE
  • iOS: NSCameraUsageDescriptionNSMicrophoneUsageDescriptionisSaveToAlbum=true 保存到相册时,还需要 NSPhotoLibraryUsageDescription / NSPhotoLibraryAddUsageDescription
  • Harmony Next: ohos.permission.CAMERAohos.permission.MICROPHONEisSaveToAlbum=true 保存到媒体库时,还需要 ohos.permission.WRITE_IMAGEVIDEO。该权限是系统授权,不是每次保存都弹出的相册选择框。

如果你的主工程已经在 manifest.json 或对应平台配置里声明过这些权限,可以直接使用。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

需要相机、麦克风权限;保存到系统相册/媒体库时,iOS 需要相册写入权限,Android 9 及以下需要外部存储写入权限,Harmony Next 通过系统授权弹窗写入媒体库。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件会访问设备相机和麦克风,用于拍照和录像,并可按 camera/defaultCamera 配置前后摄像头,按 isSaveToAlbum 配置保存到系统相册或应用沙箱,按 flashMode 配置闪光灯关闭、开启或自动。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。