更新记录
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.61uni-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:
CAMERA、RECORD_AUDIO;isSaveToAlbum=true且需兼容 Android 9 及以下保存到系统相册时,还需要WRITE_EXTERNAL_STORAGE。 - iOS:
NSCameraUsageDescription、NSMicrophoneUsageDescription;isSaveToAlbum=true保存到相册时,还需要NSPhotoLibraryUsageDescription/NSPhotoLibraryAddUsageDescription。 - Harmony Next:
ohos.permission.CAMERA、ohos.permission.MICROPHONE;isSaveToAlbum=true保存到媒体库时,还需要ohos.permission.WRITE_IMAGEVIDEO。该权限是系统授权,不是每次保存都弹出的相册选择框。
如果你的主工程已经在 manifest.json 或对应平台配置里声明过这些权限,可以直接使用。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 1966
赞赏 0
下载 12054854
赞赏 1917
赞赏
京公网安备:11010802035340号