更新记录

1.0.0(2026-08-07)

  • 首发兼容模式相机组件(Android / iOS);公开 API 统一 apply* 前缀(兼容模式 iOS 桥接中 set* 会与同名 prop 的 ObjC setter 冲突,故不用 set*
  • 双轨示例:pages/(nvue)、pagesx/(uvue)
  • 修复 nvue 多词 props 须 camelCase(如 :keyShortcut),否则快捷键不生效
  • 修复 Android 恢复前台后快捷键监听丢失

平台兼容性

uni-app(5.06)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
5.0 12 5.0以下
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

uni-app x(5.06)

Chrome Safari Android iOS 鸿蒙 微信小程序
5.0 12 5.0以下

其他

多语言 暗黑模式 宽屏模式
× ×

xview-camera-viewer

xview-camera-viewer 是面向 uni-app / uni-app x兼容模式原生相机组件,提供 Android CameraX 与 iOS AVFoundation 能力。

组件标签:<xview-camera-viewer />。需在 nvue(uni-app)或 uvue(uni-app x)页面中使用。Web / 微信小程序源码已预留,当前 package.json 矩阵未宣称组件可用。

能力概览

  • 兼容模式组件:通过 utssdk/app-android|ios/index.vue 提供原生预览
  • 统一事件回调:打开/关闭、拍照、录像进度、聚焦、缩放、状态变化与异常
  • 默认插槽:可在预览层之上叠加遮罩、按钮等人机界面
  • 组件布局完成后自动 open();页面 onShow 可配合 reopen() / close() 管理生命周期

基础用法

uni-app x(uvue)

<template>
  <view class="page">
    <xview-camera-viewer
      ref="cameraRef"
      class="camera-view"
      facing="back"
      flash="off"
      photoFormat="jpg"
      grid="draw_3X3"
      :saveToAlbum="false"
      @onPictureTaken="onPictureTaken"
      @onCameraError="onCameraError"
    />
    <image class="shutter" src="/static/camera/shutter.png" @click="takePhoto" />
  </view>
</template>

<script lang="uts">
type CameraRef = ComponentPublicInstance

export default {
  methods: {
    takePhoto() {
      const ref = this.$refs['cameraRef'] as CameraRef | null
      ref?.$callMethod('takePhoto')
    },
    onPictureTaken(e: any) {
      console.log('[xview-camera-viewer] picture', e.detail)
    },
    onCameraError(e: any) {
      console.log('[xview-camera-viewer] error', e.detail)
    }
  }
}
</script>

uni-app(nvue)

重要:兼容模式 Android/iOS 原生组件的多词 props 在 nvue 中必须使用 camelCase(如 :keyShortcut="true":previewRotate="90")。
使用 kebab-case(:key-shortcut)时,编译产物仍保留连字符,无法命中 @WXComponentProp(name="keyShortcut"),属性会静默失效。

<xview-camera-viewer
  ref="cameraRef"
  flash="off"
  :keyShortcut="true"
  @onPictureTaken="onPictureTaken"
/>
this.$refs.cameraRef.takePhoto()
this.$refs.cameraRef.applyFacing('front')
this.$refs.cameraRef.applyKeyShortcut(true)

Props

参数 类型 默认值 说明
mode string picture 拍摄模式
facing string back 镜头方向:back / front
flash string off 闪光灯:off / on / auto / torch
photoFormat string jpeg 照片后缀:jpeg / jpg / png
resolution string medium 分辨率:low / medium / high / original
saveToAlbum boolean false 是否保存到系统相册
grid string off 网格:off / draw_3X3 / draw_4x4 / draw_phi
gridColor string #808080 网格线颜色
whiteBalance string auto 白平衡
hdr string off HDR:off / on
audio string on 录像音频:on / off
cornerRadius number 0 预览圆角半径(px)
cornerRatio number 0 预览圆角比例(0–1)
previewRotate number 0 预览旋转(0/90/180/270)
zoomGesture boolean true 双指缩放
tapFocus boolean true 点击对焦
keyShortcut boolean false 物理键快捷键(Android 音量键)
shutterFeedback boolean true 拍照快门反馈
shutterSound string '' 自定义快门音路径
vibrate boolean false 拍照震动
vibrateDuration number 300 震动时长(ms)
recordSound boolean true 录像提示音
recordSoundFile string '' 录像提示音路径

组件方法

通过 ref.$callMethod('methodName', ...args)(uni-app x)或 ref.methodName(...args)(uni-app nvue)调用。

兼容模式说明:与 props 同名的方法在 iOS ObjC 桥接中会与 prop setter 冲突,因此所有公开配置类方法统一使用 apply* 前缀(如 applyFacingapplyFlashapplyZoomRatioapplyTargetSize)。原生层 Manager.set* / CameraBridge.set* 为内部实现,不对外暴露。

生命周期

方法 说明
open() 打开相机预览
reopen() 关闭后重新打开
close() 关闭预览
destroy() 销毁实例与资源
isOpened() 预览是否已打开
getCameraCapabilities() 查询缩放/镜头能力
openAppSettings() 跳转系统设置

拍摄

方法 说明
takePhoto() 拍照
startVideo(maxDuration?) 开始录像(ms,0 为手动停止)
stopVideo() 停止录像

镜头与画质

applyFacing · applyFlash · applyMode · applyPhotoFormat · applyResolution · applySaveToAlbum · applyWhiteBalance · applyHdr · applyExposure · applyAudio

缩放

applyLinearZoom · applyZoomRatio · switchUltraWide · resetZoom

预览与交互

applyGrid · applyCorner · applyPreviewRotate · applyZoomGesture · applyTapFocus · applyTargetSize · applyKeyShortcut · applyRecordSound · applyFeedback

事件

事件 说明
onCamera 相机打开
onCameraOpened 相机打开
onCameraClosed 相机关闭
onPictureTaken 拍照完成
onVideoTakenStart 开始录像
onVideoTakenProgress 录像进度
onVideoTakenEnd 录像结束
onFocusStart 开始对焦
onAutoFocusStart 自动对焦开始
onFocusEnd 对焦结束
onZoomChanged 缩放变化
onCameraChange 镜头或状态变化
onCameraTakenError 拍摄错误
onCameraError 相机错误

错误码

说明
9010001 操作失败
9010002 权限拒绝
9010003 能力不支持
9010004 设备未就绪

隐私、权限声明

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

需要摄像头、录音、震动和媒体读写权限,用于相机预览、拍照、录像和保存媒体文件。

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

插件不采集任何数据

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

暂无用户评论。